我有一個像這樣的 numpy 陣列:
data = np.array([
[1,2,3],
[1,2,3],
[1,2,101],
[4,5,111],
[4,5,6],
[4,5,6],
[4,5,101],
[4,5,112],
[4,5,6],
])
在第三列中,10001如果下一個是,我希望將值替換為101。這將導致這樣的陣列:
data = np.array([
[1,2,3],
[1,2,10001],
[1,2,101],
[4,5,111],
[4,5,6],
[4,5,10001],
[4,5,101],
[4,5,112],
[4,5,6],
])
我試過這個,我確信它會起作用,但它沒有......
dith = np.nditer(data[:, 2], op_flags=['readwrite'])
for i in dith:
if i 1 == 3:
i[...] = 10001
如果有人可以幫助解決這個問題,那就太好了。
uj5u.com熱心網友回復:
嘗試這個 -
data[np.roll(data==101,-1,0)] = 10001
array([[ 1, 2, 3],
[ 1, 2, 10001],
[ 1, 2, 101],
[ 4, 5, 111],
[ 4, 5, 6],
[ 4, 5, 10001],
[ 4, 5, 101],
[ 4, 5, 112],
[ 4, 5, 6]])
這里唯一的假設是您的第一行不包含 101
如果101矩陣的第一行可能發生潛在的情況,請嘗試下面的這種方法。
idx = np.vstack([np.roll(data==101,-1,0)[:-1], np.array([False, False, False])])
data[idx] = 10001
array([[ 1, 2, 3],
[ 1, 2, 10001],
[ 1, 2, 101],
[ 4, 5, 111],
[ 4, 5, 6],
[ 4, 5, 10001],
[ 4, 5, 101],
[ 4, 5, 112],
[ 4, 5, 6]])
uj5u.com熱心網友回復:
indices_of_101 = np.where(data[:, 2] == 101)[0]
if indices_of_101[0] = 0: # taking into accound boundary problem
indices_of_101 = indices_of_101[1:]
data[:, indices_of_101-1] = 10001
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370327.html
上一篇:按值和索引配對兩個一維陣列
