使用列索引向量将2D数组元素替换为零

时间:2018-09-30 01:02:48

标签: python numpy

我有一个二维数组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

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

这是使用git init /temp/tmp/dir # create tmpfile.txt in /temp/tmp/dir git --git-dir=/temp/tmp/dir/.git --work-tree=/temp/tmp/dir add tmpfile.txt git --git-dir=/temp/tmp/dir/.git commit --message "adding tmp file" # your question says without adding remote, so we skip "git remote add" git --git-dir=/temp/tmp/dir/.git push https://nickname@bitbucket.org/nickname/repo-name.git HEAD:refs/heads/tmp-branch 的简单python方式:

enumerate

答案 1 :(得分:1)

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)]