mat=[[0,1,5],[1,3,6],[-1,4,4],[1,2,2],[7,3,7],[2,5,3]]
mat矩陣形狀可能是10000 * 5。這裏只是一個例子在numpy陣列中,我想複製一列到另一個矩陣,並從原始矩陣中刪除列
這裏我定義一個函數。它試圖找到mat [:,0] < be或mat [:,0]> ba或mat [:,1] < bb。如果一列與條件匹配,則元素[i,0] <爲元素[i,0] = be,然後將該列複製到另一個矩陣「swape」。還要從矩陣「mat」中刪除這一列。與mat [:,0]相同> ba或mat [:,1] < bb。對於mat [:,1] < bb,colume將複製到「swapt」,mat [:,0]> ba不復制,只需刪除。
例如是= 0,BA = 6,BB = 3
返回列表應該是:
mat=[[1,3,6],[2,5,3]]
swape=[[-1,4,4]]
swapt=[[1,2,2],[0,1,5]]
該函數將返回墊,swape和SWAPT
def swapco(be,ba,bb,mat):
swape=np.array()
swapt=np.array()
leng=np.shape(mat)[0]
for i in range(leng):
if mat[i,2]<bb:
mat[i,2]=bb
np.append(swapt,i,1)
np.delete(mat, i, 0)
else:
if mat[i,0]>=ba:
mat[i,0]=ba
np.append(swape,i,1)
np.delete(mat, i, 0)
elif mat[i,0]<=be:
mat[i,0]=be
np.append(swape,i,1)
np.delete(mat, i, 0)
i+=1
return swape, swapt
在我的代碼中,我發現一旦某些列匹配條件,矩陣墊的長度總是減小。它會追加和刪除錯誤的列。另外追加是追加一個地址或deepcopy?
如果使用
for col in mat:
那麼如何刪除自己在墊子? 或者任何有效的方法來寫這個代碼?
問題更新中...
我不完全清楚你想用你的代碼實現什麼:它看起來像你試圖追加到某個數組的索引你已經檢查了一定條件的列索引。你能否更新你的文章並添加一個數值例子,例如, '墊= np.reshape(np.arange(0,15),(5,3)); BA = 11; be = 5; BB = 3'? – 2015-03-02 23:44:57
你不應該真的在循環中刪除矩陣的行或列。請記住,如果我在i = 1時刪除第1行,則第3行變爲第2行,第2行變爲第1行。現在,當i = 2時,您正在查看_old_第2行,這是_old_第3行。 _old_行2永遠不會在循環中檢查。 – 2015-03-03 00:55:31