Python使用类似matlab的布尔索引删除矩阵行

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)

我有以下问题

考虑到我有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)    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