2024-09-28 22:51:15 发布
网友
我有一个二维阵列a:
28 39 52 77 80 66 7 18 24 9 97 68
以及列索引B的向量数组:
以pythonian的方式,使用基本Python或Numpy,如何从a中选择与B中的列索引不对应的元素?在
我应该得到这个2D数组,它包含A的元素,而不是存储在B中的列索引:
28 52 80 66 7 18 97 68
您可以使用广播和行掩码为每行选择数组中未包含的元素:
设置
B = np.array([1, 0, 2, 0]) cols = np.arange(A.shape[1])
现在使用广播创建一个掩码,并索引数组。在
array([[28, 52], [80, 66], [ 7, 18], [97, 68]])
我对你另一个问题的回答
Replace 2D array elements with zeros, using a column index vector
我们可以使用前面使用的相同索引创建一个布尔mask:
mask
In [124]: mask = np.ones(A.shape, dtype=bool) In [126]: mask[np.arange(4), B] = False In [127]: mask Out[127]: array([[ True, False, True], [False, True, True], [ True, True, False], [False, True, True]])
用布尔掩码为数组编制索引会生成一个1d数组,因为在大多数情况下,这样的掩码可以在每一行中选择不同数量的元素。在
在这种情况下,可以将结果重塑回二维:
In [129]: A[mask].reshape(4,2) Out[129]: array([[28, 52], [80, 66], [ 7, 18], [97, 68]])
由于您允许使用“基本Python”,下面列出理解答案:
In [136]: [[y for i,y in enumerate(x) if i!=b] for b,x in zip(B,A)] Out[136]: [[28, 52], [80, 66], [7, 18], [97, 68]]
如果另一个A中的所有0都来自插入,那么我们还可以使用
A
In [142]: A!=0 Out[142]: array([[ True, False, True], [False, True, True], [ True, True, False], [False, True, True]])
您可以使用广播和行掩码为每行选择数组中未包含的元素:
设置
现在使用广播创建一个掩码,并索引数组。在
^{pr2}$我对你另一个问题的回答
Replace 2D array elements with zeros, using a column index vector
我们可以使用前面使用的相同索引创建一个布尔
mask
:用布尔掩码为数组编制索引会生成一个1d数组,因为在大多数情况下,这样的掩码可以在每一行中选择不同数量的元素。在
^{pr2}$在这种情况下,可以将结果重塑回二维:
由于您允许使用“基本Python”,下面列出理解答案:
如果另一个
A
中的所有0都来自插入,那么我们还可以使用相关问题 更多 >
编程相关推荐