我在numpy中有一个任意长度的2D数组,其中每个内部列表(记录)包含10个元素。有没有一种方法可以遍历整个2D数组,并根据条件创建一个只包含通过测试的记录的新数组?
类似于下面的伪代码:
array1 = np.array([1.142,2,3.10042,4,5,6,7.34141,8,9,10],[2.1535,3,4,5,6.000212,7,8,9,10,11],...)
array2 = np.empty(np.shape(array1)
for x in range(len(array1)):
if array1[x][3] > 15:
array2 = array1[x]
else:
continue
2条答案
按热度按时间mjqavswn1#
使用布尔索引:
还要注意,必须用
numpy.zeros
初始化array1
,否则所有未赋值的值将具有任意数字。oxf4rvwz2#
你可以使用
numpy.where
来选择array1
中满足你的条件的元素:这将查找
array1
的第三列大于15的行,并从array1
中选择其他所有地方都为零的行。请注意,
[:, 3, None]
索引用于防止维度的自动压缩,以创建一个 * 列向量 *,该向量可以广播到原始数组以选择整行。使用array1[:, 3] > 15
将导致ValueError:操作数无法与形状(20,)(20,10)()一起广播
与mozway's answer相比,
where
方法在我的计算机上快了约2倍:在我的计算机上,这给出了下面的
times
,它显示了np.where
(在下面的图中标记为f2
)相对于布尔索引方法(标记为f1
)的一致约2倍的加速: