2014-02-08 27 views
1

假设我有以下阵列numpy的 - 使用切片更新值给定的一个数组值

import numpy as np 
a = np.arange(0,36).reshape((6,6)).T 

[[ 0 6 12 18 24 30] 
[ 1 7 13 19 25 31] 
[ 2 8 14 20 26 32] 
[ 3 9 15 21 27 33] 
[ 4 10 16 22 28 34] 
[ 5 11 17 23 29 35]] 


for i in a[:,0]: 
    a[i][i:] = 0 

[[ 0 0 0 0 0 0] 
[ 1 0 0 0 0 0] 
[ 2 8 0 0 0 0] 
[ 3 9 15 0 0 0] 
[ 4 10 16 22 0 0] 
[ 5 11 17 23 29 0]] 

我想知道是否可以更新(消灭)使用“第一列”作为值axis = 1上切片开始的指示符,并在不使用循环的情况下执行此操作

请注意“第一列”的价值观并不一定是为了如图所示的例子那么numpy.tril不适合我在这里。我知道“第一列”中的值永远不会大于axis = 1的大小。

回答

1

这样的事情呢?请注意,我已经洗牌了第一列。

>>> a = np.arange(0,36).reshape((6,6)).T; a[2,0] = 4; a[4,0] = 2; 
>>> a 
array([[ 0, 6, 12, 18, 24, 30], 
     [ 1, 7, 13, 19, 25, 31], 
     [ 4, 8, 14, 20, 26, 32], 
     [ 3, 9, 15, 21, 27, 33], 
     [ 2, 10, 16, 22, 28, 34], 
     [ 5, 11, 17, 23, 29, 35]]) 
>>> a[np.arange(a.shape[1])[None,:] >= a[:,0,None]] = 0 
>>> a 
array([[ 0, 0, 0, 0, 0, 0], 
     [ 1, 0, 0, 0, 0, 0], 
     [ 4, 8, 14, 20, 0, 0], 
     [ 3, 9, 15, 0, 0, 0], 
     [ 2, 10, 0, 0, 0, 0], 
     [ 5, 11, 17, 23, 29, 0]]) 
+0

我很抱歉,我直到现在才回复。这正是我所需要的。谢谢! – Dickster

相关问题