Matlab 将 NaN 插入数组

Matlab Insert NaN into array

我需要将 NaN 插入数组的特定位置。 我编写了正确执行此操作的代码,但由于我需要为非常大的数组执行此操作,因此 运行 花费的时间太长。 Numpy 具有在给定位置插入项目的函数 insert(i, x)。 Matlab中有类似的功能吗?或者有更有效的方法吗?

a = [1 2 3 5 6 7 9 10 13 14];
insertNanIndex = [0 1 0 1 1 0 0 0 1 1 0 0 1 0 0 0];

for i = find(insertNanIndex)
    a = [a(1:i-1), NaN, a(i:end)]
end

这样做的有效方法是预先计算结果的大小,确保 insertNanIndex 足够大以用作掩码,然后将 a 插入正确的位置指标一次全部。现在,您实际上是在为每个 NaN 重新分配整个数组。 Numpy 的 insert 函数同样效率低下,因为它会执行相同的操作。

如果像你的例子一样,零的数量与a的元素数量相匹配,你可以根据insertNanIndex分配一个数组并直接屏蔽它:

result = nan(size(insertNanIndex));
result(~insertNanIndex) = a;

如果insertNanIndex中零的个数不等于a的大小,你可以填充或trim它,但那样的话,它更像是一个关于整件事的意义尚无定论。