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