给定一个形状为(m,n)的数据数组和相同形状的布尔掩码数组。有没有一种方法可以在没有循环的情况下应用下面的例程:
1.将掩码数组的每一列应用于数据数组,获得子数组
1.存储所有子阵列
下面是一个循环解决方案
import numpy as np
arr = np.array([
[1,2,3],
[np.nan,5,6]
])
masks = np.array([
[True, True, True],
[False, True, True]
])
arrays = []
for i in range(masks.shape[1]):
mask_i = masks[:, i]
arr_i = arr[mask_i, :]
arrays.append(arr_i)
探索潜在的解决方案:
np.take
不起作用,因为indices
参数需要均匀的形状,而在某些情况下,我们可以采取更少的行,在其他更多的行。
1.花式索引arr[masks,:]
不适用于高维掩码np.split
不起作用,因为它只能拆分以完成不重叠的子阵列
1条答案
按热度按时间6mw9ycah1#
如果你不需要子数组作为示例(比如list中的指定元素),并且可以将它们都存储在一个np数组中,那么这个片段可能会有所帮助:
所以数组将有掩码-True行来自于。