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

本文讨论如何在Python中有效地更改Scipy.sparse.csr_matrix的维度,特别是当需要添加额外的零列时。通过使用矩阵的数据、索引和indptr属性,并传递给csr_matrix构造函数,可以实现形状的改变。此外,还提到了直接修改csr_matrix的_internal_shape属性作为另一种方法,但这种方法并没有明显的优势。
摘要由CSDN通过智能技术生成

参见英文答案 > 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,numpy,scipy,python-2-7,sparse-matrix

来源: https://codeday.me/bug/20190727/1558437.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值