Python 在numpy数组中,我想将一列复制到另一个矩阵,并从原始矩阵中删除该列
垫矩阵形状可以是10000*5。这里只是一个例子 这里我定义了一个函数。它尝试查找mat[:,0]Python 在numpy数组中,我想将一列复制到另一个矩阵,并从原始矩阵中删除该列,python,arrays,numpy,matrix,copy,Python,Arrays,Numpy,Matrix,Copy,垫矩阵形状可以是10000*5。这里只是一个例子 这里我定义了一个函数。它尝试查找mat[:,0]ba或mat[:,1]
mat=[[0,1,5],[1,3,6],[-1,4,4],[1,2,2],[7,3,7],[2,5,3]]
该函数将返回mat、SWAP和SWAP
mat=[[1,3,6],[2,5,3]]
swape=[[-1,4,4]]
swapt=[[1,2,2],[0,1,5]]
那么如何在mat中删除自身?
或者用什么有效的方法来写这段代码
问题更新…从您的代码中确实不清楚您正在尝试做什么,但让我为您编写一个小示例,它可能会帮助您开始清理代码
for col in mat:
将numpy导入为np
def分离(垫、a、b):
断言a
我希望上面的例子能帮助你开始自己的项目。有一件事可能有点让人困惑,上面代码中的
~
被用作“逻辑not”运算符。它可以以这种方式用于bool
类型的numpy数组,但要小心,因为它对其他python对象有不同的含义(称为补码运算符).我还不完全清楚您想用代码实现什么:看起来您正试图在某个数组中附加针对特定条件检查过的列的索引。你能更新你的帖子并添加一个数字例子吗?例如,mat=np.reforme(np.arange(0,15),(5,3));ba=11;be=5;bb=3
?您不应该真正删除循环中矩阵的行或列。请记住,如果在I=1时删除行1,则行3将变为行2,行2将变为行1。现在,当i=2时,您将看到新的第2行,即旧的第3行。旧的第2行从未在循环中检查过。您的回答非常有用。所以在这里,我可以使用布尔运算。例如mat[:,0]c断言b>c?它似乎给了我错误的通知…您可以完全组合比较操作,例如(mat[:,0]c)
。确保包含括号。实际上并不需要断言,它只是惰性错误检查。
for col in mat:
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]]