Python使用类似matlab的布尔索引删除矩阵行
我有以下问题 考虑到我有9 x 9稀疏单位矩阵Python使用类似matlab的布尔索引删除矩阵行,python,matlab,numpy,Python,Matlab,Numpy,我有以下问题 考虑到我有9 x 9稀疏单位矩阵var和一个3x3布尔矩阵bol,其中位置(2,2)的值为False 在matlab中,我可以删除这样的行 var1 = speye(9); bol=false(3,3); bol(3:3,1:3)=1; bol(1:3,1:1)=1; bol(1:1,1:3)=1; bol(1:3,3:3)=1; var1(bol(:),:)=[]; 我得到了结果 var1 = (1,5)
var
和一个3x3布尔矩阵bol
,其中位置(2,2)的值为False
在matlab中,我可以删除这样的行
var1 = speye(9);
bol=false(3,3);
bol(3:3,1:3)=1;
bol(1:3,1:1)=1;
bol(1:1,1:3)=1;
bol(1:3,3:3)=1;
var1(bol(:),:)=[];
我得到了结果
var1 =
(1,5) 1
我怎么能在Python中这么容易做到这一点
在Python中,我创建了如下变量:
import numpy as np
from scipy import sparse
var1 = sparse.eye(9).tocsc()
bol = np.zeros((3,3),dtype='bool')
bol[2:3,0:3]=1
bol[0:3,0:1]=1
bol[0:1,1:3]=1
bol[0:3,-1]=1
我还用Python创建了var1\u del
,类似于matlab中的var1(bol(:),)
va1_del = var1[bol.reshape(9)[:],:]
这是我尝试删除行的原因。结果显然是错误的
var1 = [x for x in var1 if not x in var_del]
var1 =
[]
你知道如何使它工作吗?这读起来很像从matlab到python的人。有很多方法可以把它变成蟒蛇
import numpy as np
from scipy import sparse
var1 = sparse.eye(9).tocsc()
# we can make our truth matrix much faster
bol = np.ones((3, 3), dtype='bool')
bol[1, 1] = False
在matlab中,要删除一行,请将其设置为[]
。在python中,我们可以像这样使用numpy高级索引来只保留我们想要的行(~
是元素方面的而不是操作符):
var1
现在是:
repr: <1x9 sparse matrix of type '<class 'numpy.float64'>'
with 1 stored elements in Compressed Sparse Column format>
str: (0, 4) 1.0
repr:
str:(0,4)1.0
因为我们在python中,每个索引都要少1,所以这与您的matlab结果相同
repr: <1x9 sparse matrix of type '<class 'numpy.float64'>'
with 1 stored elements in Compressed Sparse Column format>
str: (0, 4) 1.0