簡體   English   中英

numpy - 使用給定數組值的切片更新值

[英]numpy - update values using slicing given an array value

假設我有以下數組

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

我想知道我是否可以使用“第一列”作為軸 =1 上切片開始的指示符來更新(清除)值,並且不使用循環來執行此操作。

請注意“第一列”中的值不一定按示例中所示的順序排列,因此 numpy.tril 在這里不適合我。 我確實知道“第一列”中的值永遠不會大於軸 = 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]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM