用python与matlab实现矩阵切片

zfciruhq  于 2023-01-13  发布在  Matlab
关注(0)|答案(3)|浏览(193)

在成为MATLAB用户多年之后,我现在正在迁移到Python。
我试图找到一种简洁的方式,简单地用python重写下面的MATLAB代码:

s = sum(Mtx);
newMtx = Mtx(:, s>0);

其中Mtx是2D稀疏矩阵
我的python解决方案是:

s = Mtx.sum(0)
newMtx = Mtx[:, np.where((s>0).flat)[0]] # taking the columns with nonzero indices

其中Mtx是2D CSC稀疏矩阵
python代码不像matlab中那样可读性/优雅。。有没有想法如何写得更优雅?
谢谢!

wh6knrhe

wh6knrhe1#

找到了一个简洁的答案,多亏了雷凌的带领:

s = Mtx.sum(0)
newMtx = Mtx[:,(s.A1 > 0)]

另一种选择是:

s = Mtx.sum(0)
newMtx = Mtx[:,(s.A > 0)[0]]
waxmsbnn

waxmsbnn2#

请尝试执行以下操作:

s = Mtx.sum(0);
newMtx = Mtx[:,nonzero(s.T > 0)[0]]

来源:链接
与您的版本相比,它没有那么模糊,但根据指南,这是您能得到的最好的版本!

4xrmg8kj

4xrmg8kj3#

尝试使用find获取与查找条件匹配的行和列索引

import numpy as np
from scipy.sparse import csr_matrix
import scipy.sparse as sp
  
# Creating a 3 * 4 sparse matrix
sparseMatrix = csr_matrix((3, 4), 
                          dtype = np.int8).toarray()

sparseMatrix[0][0] = 1
sparseMatrix[0][1] = 2
sparseMatrix[0][2] = 3
sparseMatrix[0][3] = 4
sparseMatrix[1][0] = 5
sparseMatrix[1][1] = 6
sparseMatrix[1][2] = 7
sparseMatrix[1][3] = 8
sparseMatrix[2][0] = 9
sparseMatrix[2][1] = 10
sparseMatrix[2][2] = 11
sparseMatrix[2][3] = 12

# Print the sparse matrix
print(sparseMatrix)

B = sparseMatrix > 7 #the condition
row, col, data = sp.find(B)
print(row,col)
for a,b in zip(row,col):
    print(sparseMatrix[a][b])

相关问题