python – 有效地改变scipy.spare.csr_matrix的维度[复制]
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 有效地改变scipy.spare.csr_matrix的维度[复制],小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1465字,纯文字阅读大概需要3分钟。
内容图文
![python – 有效地改变scipy.spare.csr_matrix的维度[复制]](/upload/InfoBanner/zyjiaocheng/745/9e4873fa75524bf48800081b0f9f7deb.jpg)
参见英文答案 > 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],[1,2,0]])
>>>y
(0, 0) 1
(0, 1) 2
(1, 0) 1
(1, 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)
这样做并没有什么优势.
内容总结
以上是互联网集市为您收集整理的python – 有效地改变scipy.spare.csr_matrix的维度[复制]全部内容,希望文章能够帮你解决python – 有效地改变scipy.spare.csr_matrix的维度[复制]所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。