A = np.array([[4, 3, 2],
[1, 2, 3],
[0, -1, 5]])
shift = np.array([1,2,1])
out = np.array([[3, 2, np.nan],
[3, np.nan, np.nan],
[-1, 5, np.nan]])
我想按照移位向量的給定,將 2D numpy 陣列獨立地向左移動每一行,并用 Nan 估算右側。
這個你能幫我嗎
謝謝
uj5u.com熱心網友回復:
import numpy as np
A = np.array([[4, 3, 2],
[1, 2, 3],
[0, -1, 5]])
shift = np.array([1,2,1])
x,y = A.shape
res = np.full(x*y,np.nan).reshape(x,y)
for i in range(x):
for j in range(y):
res[i][:(y-shift[i])]=A[i][shift[i]:]
print(res)
uj5u.com熱心網友回復:
使用矩陣Ref的 Roll 行
from skimage.util.shape import view_as_windows as viewW
import numpy as np
A = np.array([[4, 3, 2],
[1, 2, 3],
[0, -1, 5]])
shift = np.array([1,1,1])
p = np.full((A.shape[0],A.shape[1]-1),np.nan)
a_ext = np.concatenate((A,p,p),axis=1)
n = A.shape[1]
shifted =viewW(a_ext,(1,n))[np.arange(len(shift)), -shift (n-1),0]
print(shifted)
輸出 #
[[ 3. 2. nan]
[ 2. 3. nan]
[-1. 5. nan]]
uj5u.com熱心網友回復:
你應該只使用一個 for 回圈和np.roll每行。
import numpy as np
A = np.array([[4, 3, 2],
[1, 2, 3],
[0, -1, 5]]).astype(float)
shift = np.array([1,2,1])
out = np.copy(A)
for i,shift_value in enumerate(shift):
out[i,:shift_value] = np.nan
out[i,:] = np.roll(out[i,:], -shift_value, 0)
print(out)
[[ 3. 2. nan]
[ 3. nan nan]
[-1. 5. nan]]
雖然有人可能認為減少對 的呼叫np.roll會有所幫助,但它不會,因為這正是np.roll內部實作的方式,并且您的代碼中將有 2 個回圈而不是 1 個。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/533447.html
標籤:Python麻木的向量
