【问题标题】:Replace 2D array elements with zeros, using a column index vector使用列索引向量将二维数组元素替换为零
【发布时间】:2018-09-30 01:02:47
【问题描述】:

我有一个二维数组 A:

28  39  52
77  80  66   
 7  18  24    
 9  97  68

还有一个列索引的向量数组B:

1   
0   
2    
0

如何以 python 的方式,使用基本 python 或 numpy,用零替换 A 的每一行上与 B 中的列索引相对应的元素?

我应该得到以下新数组 A,每行有一个元素(列索引中存储在 B 中的那个),替换为零:

28   0  52
 0  80  66   
 7  18   0    
 0  97  68

感谢您的帮助!

【问题讨论】:

  • 你试过什么?此外,您的数组B 的一部分丢失了

标签: python numpy


【解决方案1】:

这是一种使用enumerate 的简单pythonian 方式:

for i, j in enumerate(B):
    A[i][j] = 0

【讨论】:

  • 很好的解决方案!欢迎来到 SO
【解决方案2】:
In [117]: A = np.array([[28,39,52],[77,80,66],[7,18,24],[9,97,68]])                                                     
In [118]: B = [1,0,2,0]                                                                                                 

要从每一行中选择一个元素,我们需要使用与B 匹配的数组来索引行:

In [120]: A[np.arange(4),B]                                                                                             
Out[120]: array([39, 77, 24,  9])

我们可以设置相同的元素:

In [121]: A[np.arange(4),B] = 0                                                                                         
In [122]: A                                                                                                             
Out[122]: 
array([[28,  0, 52],
       [ 0, 80, 66],
       [ 7, 18,  0],
       [ 0, 97, 68]])

这最终会使用索引 (0,1)、(1,0)、(2,2)、(3,0) 对点进行索引。

基于列表的“转置”生成相同的对:

In [123]: list(zip(range(4),B))                                                                                         
Out[123]: [(0, 1), (1, 0), (2, 2), (3, 0)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2023-01-25
    相关资源
    最近更新 更多