mat=[[0,1,5],[1,3,6],[-1,4,4],[1,2,2],[7,3,7],[2,5,3]]
垫子矩阵形状可以是10000 * 5。这里只是一个例子
这里我定义了一个函数。它试图找到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不要复制,只需删除。
例如,be = 0,ba = 6,bb = 3返回列表应为:
mat=[[1,3,6],[2,5,3]]
swape=[[-1,4,4]]
swapt=[[1,2,2],[0,1,5]]
该函数将返回mat,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
在我的代码中,我发现一旦某些列匹配条件,矩阵垫长度总是减少。它会追加并删除错误的列。附加内容是附加地址还是深层复制?
如果使用
for col in mat:
然后如何在垫子中删除自己? 或者编写此代码的任何有效方式?
问题已更新......
答案 0 :(得分:1)
从你的代码中你真的不清楚你正在尝试做什么,但是让我为你写一个可以帮助你开始清理代码的例子。
import numpy as np
def split(mat, a, b):
assert a < b
where_less_than_a = mat[:, 0] < a
where_less_than_b = mat[:, 0] < b
less_than_a = mat[where_less_than_a, :]
between_a_b = mat[(~where_less_than_a) & where_less_than_b, :]
greater_eq_b = mat[(~where_less_than_b), :]
return less_than_a, between_a_b, greater_eq_b
mat = np.arange(27).reshape((9, 3))
x, y, z = split(mat, 4., 17.)
print(x)
# [[0 1 2]
# [3 4 5]]
print(y)
# [[ 6 7 8]
# [ 9 10 11]
# [12 13 14]
# [15 16 17]]
print(z)
# [[18 19 20]
# [21 22 23]
# [24 25 26]]
我希望上面的例子可以帮助您开始自己的项目。有一件事可能有点令人困惑,上面代码中的~
用作&#34;逻辑不&#34;运营商。它可以以类型bool
的numpy数组的方式使用,但要小心,因为它对其他python对象具有不同的含义(它被称为补码运算符)。