我有以下问题。
考虑到我有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_del
,类似于matlab中的var1(bol(:),)
va1_del = var1[bol.reshape(9)[:],:]
这是我尝试删除行。结果显然是错误的
var1 = [x for x in var1 if not x in var_del]
var1 =
[]
你知道如何让它发挥作用吗?
答案 0 :(得分:1)
这看起来很像从matlab到python的人。有一些方法可以进行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高级索引来保留我们想要的行(~
是明智的not
运算符):
# ~bol.flatten(): array([False, False, False, False, True, False, False, False, False])
var1 = var1[~bol.flatten()]
var1
现在是:
repr: <1x9 sparse matrix of type '<class 'numpy.float64'>'
with 1 stored elements in Compressed Sparse Column format>
str: (0, 4) 1.0
因为我们在python中每个索引都少1,所以这与你的matlab结果相同。