可分离的基于块的操作

有效地执行分离操作(例如,和,意思是,刺激,分钟,马克斯,…)在数组区块

1.4 k下载

更新2019年3月29日

查看许可协议

这贡献的灵感来源于一个系列文章由布鲁诺陈德良和Jan西蒙。通常,我们希望将一个数组分成相同大小的子块,这些块上执行一个操作,减少他们标量。通用块业务,MATLAB像BLOCKPROC可用功能。通常也可以做这种处理数组使用MAT2CELL细分到细胞,每个包含一块,然后应用CELLFUN。
对于某些特定的操作和常见的种类,但是,它是可能的一种特别高效的计算方式。这些函数包括sum(),刺激(),(),max ()、min (),…可以做可分离地沿着每个维度的块,第一列,然后沿着行,等等……例如,

和(B) =总和(金额(金额(B, 1), 2), 3)

通过将这些函数分解为可分离的调用,可以做块数组中最小的数据复制和高度的向量化和连续的内存访问。的mfunction SEPBLOCKFUN在此提交优化可分离函数的计算以这种方式用户关心供应。

用法:

Y = sepblockfun (X, blockdims有趣)

:


X:一个完整的数组。如果ndSparse类定义的路径,那么X
也可以定期稀疏矩阵或者ndSparse数组。性能可能会
不像完整的阵列,然而。

blockdims:一个整数向量指定的尺寸
子块。数组X必须均匀分割成块
这个尺寸的。如果blockdims(我)被设置为正无穷
换成blockdims (i) = (X, i)大小。

乐趣:函数处理手术被认为是可分的
(例子:最大值、最小值、求和、刺激的意思是,等)。函数必须
接受输入语法有趣(B,暗),B是一个输入数组
和昏暗的运作是一个维度。另外,
乐趣可以下列字符串之一的‘麦克斯’,‘敏’,‘和’,‘说’,
“刺激”。


:

Y:输出数组。Y (i) =乐趣(ξ(:),1)习近平在第i个区块
输入数组X。


示例1:

把400 x400x400数组分成10 x10x10块。返回块,
意思是,马克斯。,每个块的分钟,每个组织为一个40 x40x40数组。

一个=兰德(400400400);
一= sepblockfun ([10、10、10], @mean);
阿明= sepblockfun([10、10、10],“最小值”);
Amaxs = sepblockfun ((10、10、10), @ (B, d) max (B, [], d));

示例2:

不是所有操作满足分离性的属性,但
有时不可分割的操作可以分解为可分离的。作为
一个例子,我们把块标准差相同的数组
从例1。

美国=√sepblockfun a ^ 2,(10、10、10)“的意思是”)- - -一。^ 2);

还可以使用SEPBLOCKFUN稀疏矩阵和数组如果你碰巧有我ndSparse类<//www.tatmou.com/matlabcentral/fileexchange/29832-n-dimensional-sparse-arrays >安装。然而,稀疏阵列可能受益从计算策略比完整的阵列,部分原因在于重塑稀疏矩阵的操作效率较低。也只是可能的应用可分离函数重载了ndSparse类。

引用作为

马特·J (2023)。可分离的基于块的操作(//www.tatmou.com/matlabcentral/fileexchange/48089-separable-block-wise-operations), MATLAB中央文件交换。检索

MATLAB版本兼容性
创建R2013b
兼容任何释放
平台的兼容性
窗户 macOS Linux

社区寻宝

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

开始狩猎!
版本 发表 发布说明
1.3.0.2版本

没有变化

1.3.0.1

没有变化

1.3.0.0

*
编辑的描述。
*处理情况下,长度(blockdims) < ndims (X)
*现在可以指定特定的共同选择的块操作“乐趣”(例如,最大值、最小值、总和、…)为字符串。

1.2.0.0

小编辑

1.1.0.0

小编辑描述部分

1.0.0.0