CopyMask -逻辑索引
Matlab的线性索引速度很快,比通常使用FIND快得多。
但如果使用C-Mex函数,速度可以提高一倍以上。
Y = CopyMask(X, Mask, Dim)
输入:
X:数组类型:DOUBLE, SINGLE, (U)INT8/16/32/64), LOGICAL, CHAR。
X可以是复数。
掩码:作为逻辑向量的掩码。
暗:指定遮罩尺寸。如果省略或空矩阵[]
采用线性索引。可选,默认值:[]。
输出:
Y:与x类型相同的数组。对于线性索引,Y是一个[N x1]向量。
注:
-等效Matlab代码:Y = X(Mask)
-与Matlab逻辑索引的区别:
* 2到3倍快的线性索引。
*在每种情况下都返回一个列向量。
*掩码不能超过数组,而Matlab允许额外的
当尾随值为FALSE时。
—如果指定了Dim,且X值不小,则该函数仅为某个百分比
比等效的Matlab代码快,例如:Y = X(:, Mask,:)
例子:
X = rand(2,3,4);
Y = CopyMask(X, X > 0.2);% Matlab: X(X > 0.2),明显更快
M =[真,假,真];
Z = CopyMask(X, M, 2);% Matlab: X(:, M,:),稍微快一点
我只能在Matlab 2009a和2011b下进行测试。在现代Matlab版本中,这种加速可能已经消失了。请随时将单元测试函数的输出发送到代码中给出的地址。
首先必须编译c文件。如果之前执行了"mex -setup",则在没有输入的情况下调用CopyMask将启动自动编译。如果编译失败,你可以下载预编译文件:http://www.n-simon.de/mex
引用作为
1月(2023)。CopyMask(//www.tianjin-qmedu.com/matlabcentral/fileexchange/49553-copymask), MATLAB中央文件交换。检索.