gpt4 book ai didi

python - 将一列零添加到 csr_matrix

转载 作者:太空狗 更新时间:2023-10-29 21:26:33 29 4
gpt4 key购买 nike

我有一个 MxN 稀疏 csr_matrix,我想在矩阵的右侧添加一些只有零的列。原则上,数组indptrindicesdata保持不变,所以我只想改变矩阵的维度。但是,这似乎没有实现。

>>> A = csr_matrix(np.identity(5), dtype = int)
>>> A.toarray()
array([[1, 0, 0, 0, 0],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 1, 0],
[0, 0, 0, 0, 1]])
>>> A.shape
(5, 5)
>>> A.shape = ((5,7))
NotImplementedError: Reshaping not implemented for csr_matrix.

水平堆叠零矩阵似乎也不起作用。

>>> B = csr_matrix(np.zeros([5,2]), dtype = int)
>>> B.toarray()
array([[0, 0],
[0, 0],
[0, 0],
[0, 0],
[0, 0]])
>>> np.hstack((A,B))
array([ <5x5 sparse matrix of type '<type 'numpy.int32'>'
with 5 stored elements in Compressed Sparse Row format>,
<5x2 sparse matrix of type '<type 'numpy.int32'>'
with 0 stored elements in Compressed Sparse Row format>], dtype=object)

这就是我最终想要实现的。有没有一种快速 reshape 我的 csr_matrix 而不复制其中的所有内容的方法?

>>> C = csr_matrix(np.hstack((A.toarray(), B.toarray())))
>>> C.toarray()
array([[1, 0, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0]])

最佳答案

您可以使用 scipy.sparse.vstackscipy.sparse.hstack 来更快:

from scipy.sparse import csr_matrix, vstack, hstack

B = csr_matrix((5, 2), dtype=int)
C = csr_matrix((5, 2), dtype=int)
D = csr_matrix((10, 10), dtype=int)

B2 = vstack((B, C))
#<10x2 sparse matrix of type '<type 'numpy.int32'>'
# with 0 stored elements in COOrdinate format>

hstack((B2, D))
#<10x12 sparse matrix of type '<type 'numpy.int32'>'
# with 0 stored elements in COOrdinate format>

请注意,输出是一个 coo_matrix,可以有效地转换为 CSRCSC 格式。

关于python - 将一列零添加到 csr_matrix,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26462617/

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