gpt4 book ai didi

python - 如何有效地从仅包含零的稀疏矩阵中删除列?

转载 作者:太空狗 更新时间:2023-10-29 18:05:01 24 4
gpt4 key购买 nike

从仅包含零的稀疏矩阵中有效删除列的最佳方法是什么。我有一个我创建并填充了数据的矩阵:

matrix = sp.sparse.lil_matrix((100, 100))

我现在想删除 ~ 最后 20 列,它们只包含零数据。我该怎么做?

最佳答案

如果这只是一个 numpy 数组,X,那么您可以说 X!=0,这将为您提供一个与 相同形状的 bool 数组X,然后您可以使用 bool 数组索引 X,即 non_zero_entries = X[X!=0]

但这是一个不支持 bool 索引的稀疏矩阵,如果您尝试 X!=0 也不会给您想要的东西——它只返回一个看起来像仅当它们是完全相同的矩阵(在内存中)时才返回 true。

你想要的是 numpy 的 nonzero 方法。

import numpy as np
from scipy import sparse

X = sparse.lil_matrix((100,100)) # some sparse matrix
X[1,17] = 1
X[17,17] = 1
indices = np.nonzero(X) # a tuple of two arrays: 0th is row indices, 1st is cols
X.tocsc()[indices] # this just gives you the array of all non-zero entries

如果您只想要包含非零条目的完整列,那么只需从索引中获取第一个。除非您需要考虑重复索引(如果一列中有多个条目):

columns_non_unique = indices[1]
unique_columns = sorted(set(columns_non_unique))
X.tocsc()[:,unique_columns]

关于python - 如何有效地从仅包含零的稀疏矩阵中删除列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10668916/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com