我想將一個 3D 陣列的 N 行一個接一個地堆疊起來以形成一個 4D 陣列。我想從前 N 行開始,即行 = 1, ..., N,并且總是前進一行,即接下來的 N 行將是行 = 2, ..., N 1。這意味著3D 陣列的前 N ??行成為 4D 陣列的第一行。3D 陣列的下 N 行成為 4D 陣列的第二行,依此類推。
我已經找到了解決我的問題的方法。但是,該代碼效率低下,并且計算具有多行的大型 3D 陣列需要很長時間。這是我所做的:
import numpy as np
N = 3
X = (np.ones((5,3)).transpose()*np.array([1,2,3,4,5])).transpose()
X = np.dstack((X, 2*X))
Z = np.empty((0, N, X.shape[1], X.shape[2]))
for i in range(N-1, X.shape[0]):
temp1 = X[i-N 1:i 1, :, :]
temp1 = np.expand_dims(temp1, axis=0)
Z = np.append(Z, temp1, axis=0)
我希望代碼能清楚地說明我的目標是什么。
在此先感謝您的幫助。
uj5u.com熱心網友回復:
使您的解決方案變慢的部分可能是 np.append 操作,因為必須為每次回圈迭代(重新)分配陣列的內部記憶體。對于大型陣列,這可能是相當多的開銷。從您的代碼片段中,我假設 的長度Z在回圈之前是已知的,因此此修改可能會加快您的代碼速度:
import numpy as np
N = 3
X = (np.ones((5,3)).transpose()*np.array([1,2,3,4,5])).transpose()
X = np.dstack((X, 2*X))
n_z = X.shape[0] - N 1
Z = np.empty((n_z, N, X.shape[1], X.shape[2]))
for idx, i in enumerate(range(N-1, X.shape[0])):
Z[idx] = X[i-N 1:i 1, :, :]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/377972.html
下一篇:Json_agg作為單個物件
