为什么blockproc返回空的吗?

6视图(30天)
马特·J
马特·J 2022年12月24日
编辑: 马特·J 2022年12月25日
blockproc 文档说块函数可以返回一个向量。我这样做,prodcues非空输出,如下显示。然而,最终的输出返回的B blockproc是空的。为什么,以及如何获得有意义的向量值输出blockproc吗?
一个=重塑(1:4 2 2)
一个= 2×2
1 2 3 4
B = blockproc (@blockfun, (2, 2),“BorderSize”[1])
了= 16×1
0 0 0 0 0 1 2 0 0 3
14×B = 0空矩阵
函数= blockfun(年代)
= S.data (:)
结束

接受的答案

图像分析
图像分析 2022年12月24日
编辑:图像分析 2022年12月24日
你不能指定一个bordersize 2 x2的矩阵。没有什么离开你砍后输入矩阵。似乎边界大小blockproc后实现。所以当blockproc内部的输出是一个列向量,在返回主程序,当它排第一个和最后一个行和列,你一无所有,因为只有单个列输出。因此它是空的。摆脱BorderSize选项如果你的矩阵是小。使用它只是为了更大的矩阵。
一个=重塑(1:4 2 2)
一个= 2×2
1 2 3 4
B = blockproc (A, (2, 2) @blockfun)
了= 4×1
1 2 3 4
B = 4×1
1 2 3 4
函数= blockfun(年代)
= S.data (:)
结束
6个评论
马特·J
马特·J 2022年12月25日
编辑:马特·J 2022年12月25日
我永远不要看到任何需要在我的作品中填充和边界的所以我从不使用这些选项。
奇怪。根据我的经验, blockproc 非常慢,经常有更快的选择。这就是为什么我创建 这FEX提交 (见下面的演示)。唯一的情况下我可以想象它是有用的,当你需要一个边境块。
一个=兰德(4000);
bsz = (4, 4);% blocksize
msk =眼(4);
有趣= @ s.data。* msk的;
抽搐;
着干活= blockproc (bsz,有趣的);
toc
运行时间是5.224310秒。
抽搐;
tmp = blkReshape (bsz, 1, 1, [])。* msk的;
out2 = blkReshape (tmp、bsz blkSize (A, bsz));
toc
运行时间是0.149759秒。
错误= max (abs (out1-out2), [],“所有”)
错误=
0

登录置评。

更多的答案(0)

标签

s manbetx 845


释放

R2022a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!