如何高效地在二维numpy数组的每行开头添加指定数量的np.nan值?
高效在NumPy数组每行开头添加固定数量的NaN值
你可以用矢量化切片赋值的方法替代循环,这是NumPy中处理这类问题的最优方案,完全避免了循环带来的性能损耗:
import numpy as np original_array = np.random.rand(3, 3) num_nan = 2 # 指定要添加的NaN数量 # 直接创建目标形状的数组,全部初始化为NaN new_array = np.full((original_array.shape[0], num_nan + original_array.shape[1]), np.nan) # 将原数组的数据赋值到目标数组的对应位置(跳过开头的NaN区域) new_array[:, num_nan:] = original_array
为什么这个方法更好?
- 没有循环操作,完全利用NumPy的矢量化特性,在数据量较大时(比如你的(3,123...)数组,甚至更大规模),效率比循环+
concatenate高得多 - 避免了循环中每次
concatenate产生的临时数组,减少内存开销 - 代码更简洁直观,逻辑清晰
你的循环方法虽然能实现功能,但每次循环都要执行concatenate并赋值,在数组行数多或者每行长度大的场景下,性能会明显下降。
内容的提问来源于stack exchange,提问作者Fabio Magarelli
相关产品推荐
相关产品推荐

