【发布时间】:2014-09-09 13:13:59
【问题描述】:
我有两个 matlab 数组,非常大,超过 41k 行,每行有 10 列。
我还有一个大小完全相同的数组,其中填充了 1 和 0。我需要将此逻辑数组应用于第一个数组,如果值为逻辑真,则传递数字,否则如果为假,则必须返回 NaN。
使用类似的东西:
output= number(array)
只给出正逻辑数组值的输出,但我需要保持数组的大小/结构相同,我该怎么做?
【问题讨论】:
我有两个 matlab 数组,非常大,超过 41k 行,每行有 10 列。
我还有一个大小完全相同的数组,其中填充了 1 和 0。我需要将此逻辑数组应用于第一个数组,如果值为逻辑真,则传递数字,否则如果为假,则必须返回 NaN。
使用类似的东西:
output= number(array)
只给出正逻辑数组值的输出,但我需要保持数组的大小/结构相同,我该怎么做?
【问题讨论】:
首先让我们生成一个虚拟矩阵和一个虚拟掩码
A = rand(5,3);
M = randi([0 1], 5, 3);
然后你可以将掩码应用到原始矩阵
A(not(M)) = nan;
【讨论】:
A 的信息。这可能是可取的,但如果内存不足...在 Matlab 中,not(M) 通常写为~M
用NaNs预分配output:
output = NaN(size(number))
output(array) = number(array)
【讨论】:
output(1:size(number,1),1:size(number,2))= NaN 的性能可能更好 - undocumentedmatlab.com/blog/preallocation-performance