加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 有效地改变scipy.spare.csr_matrix的维度[复制]

发布时间:2020-12-20 11:43:30 所属栏目:Python 来源:网络整理
导读:参见英文答案 Adding a column of zeroes to a csr_matrix????????????????????????????????????2个 我有一个函数,它采用csr_matrix并对其进行一些计算. 这些计算的行为要求该矩阵的形状是特定的(比如NxM). 我发送的输入具有较少的列和确切的行数. (例如,它
参见英文答案 > Adding a column of zeroes to a csr_matrix????????????????????????????????????2个
我有一个函数,它采用csr_matrix并对其进行一些计算.

这些计算的行为要求该矩阵的形状是特定的(比如NxM).

我发送的输入具有较少的列和确切的行数.

(例如,它具有形状=(A,B),其中A< N和B == M) 例如:我有对象x

>>>x = csr_matrix([[1,2],[1,2]])
>>>x
(0,0)  1
(0,1)  2
(1,0)  1
(1,1)  2
>>>x.shape
(2,2)

和函数f:

def f(csr_mat):
    """csr_mat.shape should be (2,3)"""

然后我想在x上做一些事情,所以它会变成y:

>>>y = csr_matrix([[1,2,0],0]])
>>>y
(0,1)  2
>>>y.shape
(2,3)

在此示例中,x和y具有相同的非零值,但y具有不同的形状.我想要的是有效地’扩展’x到一个新的维度,用零填充新的列.即,给定x和new_shape =(2,3),它应该返回y.
我已经尝试过重塑:

x.reshape((2,3))

但后来我得到了:

NotImplementedError

我的第二个选择是创建具有不同形状的新csr_matrix:

z = csr_matrix(x,shape=(3,3))

但这也失败了:

NotImplementedError: Reshaping not implemented for csr_matrix.

编辑:使用csc_matrix带来了同样的错误.

有任何想法吗?

谢谢

解决方法

在CSR格式中,所需y的基础数据,索引和indptr数组与x矩阵的基础数据,索引和indptr数组相同.您可以使用新形状将它们传递给csr_matrix构造函数:

y = csr_matrix((x.data,x.indices,x.indptr),shape=(2,3))

请注意,构造函数默认为copy = False,因此这将共享x和y之间的数据,索引和indptr. y上的一些操作将反映在x中.您可以传递copy = True以使x和y彼此独立.

如果你想查看csr_matrix的未记录的内部,你可以设置内部_shape属性,使x数组具有你想要的形状:

x._shape = (2,3)

这样做并没有什么优势.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读