[英]Inserting element into arbitrary position of an n-dimensional array
我正在使用Python 2.7創建一個復數值(mxn)維數組,而沒有一個最初已知的固定大小(即m和n提前未知),它將為特定元素分配不同的值。 因此,我將在以后指定的任意位置更改現有元素或向此數組添加新元素。
通常,我想將指定大小的初始數組轉換為(mxn)維數組。 例如,如果我開始
[ 0.+0.j 0.+0.j 0.+0.j]
[ 0.+0.j 0.+0.j 0.+0.j]
我想對其進行更新以產生情況1,情況2或情況3(我決定選擇哪種情況)。 本質上,我想做的就是向初始數組添加零行或零列(或兩者都添加)。
情況1:
[ 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
[ 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
情況2:
[ 0.+0.j 0.+0.j 0.+0.j]
[ 0.+0.j 0.+0.j 0.+0.j]
[ 0.+0.j 0.+0.j 0.+0.j]
情況3:
[ 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
[ 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
[ 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
當使用與上述類似的方法但使用np.insert時,我可以通過以下方式重現我想要的內容:
import numpy as np
T = np.zeros((2,3),dtype=np.complex_)
T = np.insert(T,len(T[0]),1,axis = 1)
要么
T = np.zeros((2,3),dtype=np.complex_)
T = np.insert(T,len(T[:,0]),1,axis = 0)
使用這種方法,我可以嘗試實現案例1、2或3,但是有沒有特別有效的方法?
同樣,約束條件是必須使用具有復雜類型元素的對象,因為這些條目將在進一步的算法中使用。 我可以將元素的實際部分和復雜部分分開,再創建兩個列表,但是仍然需要對它們進行數學運算。 另外,最終數組的m和n值(大於)可能超過1000。(直到代碼結束,才知道數組的最終必要大小。)
能夠以更有效的方式向初始數組添加空行或列的任何見識都將是很棒的。
嘗試這個:
np.concatenate((T, np.zeros((1,T.shape[1]), dtype=np.complex_)), axis=0)
和
np.concatenate((T, np.zeros((T.shape[0],1), dtype=np.complex_)), axis=1)
我建議研究np.insert
的代碼。 是Python。 如果它很復雜,那僅僅是因為它試圖變得通用,處理行或列等。
基本思想是制作一個具有正確大小的新結果數組,然后將值的塊從原始值復制到結果中。 在1d中,它類似於:
z = np.zeros(x.shape[0]+1, dtype=x.dtype)
z[:i] = x[:i]
z[i+1:] = x[i:]
可以很容易地將其概括為在2d中添加一行(可能僅需要z[:i,...]
)。
要添加列和行,我可以想象復制4個塊。
也可以使用級聯(在已編譯的代碼中執行類似的塊復制)。
np.concatenate([x[:i],np.array([0]), x[i:]])
np.insert
可能更易於使用,但是您最終會以某種方式進行這種塊復制。
現在,如果您只想添加行或列(或同時添加兩者),則可以使用np.pad
。 這很籠統,可以在每個維度的前端和后端添加內容。 如果要在數組中間的某個位置添加新值, np.insert
會更有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.