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它,但那样的话,它更像是一个关于整件事的意义尚无定论。
我需要将 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它,但那样的话,它更像是一个关于整件事的意义尚无定论。