ome*_*rbp 3 python numpy scipy sparse-matrix python-2.7
我有一个函数,它需要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)
Run Code Online (Sandbox Code Playgroud)
功能f
:
def f(csr_mat):
"""csr_mat.shape should be (2,3)"""
Run Code Online (Sandbox Code Playgroud)
然后我想做点什么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)
Run Code Online (Sandbox Code Playgroud)
在这个例子中,x
与y
具有相同的无零的值,但y
具有不同的形状.我想要的是有效地"扩展" x
到一个新的维度,用零填充新的列.也就是说,考虑到x
和new_shape=(2,3)
,它应该返回y
.
我已经尝试过reshape
:
x.reshape((2,3))
Run Code Online (Sandbox Code Playgroud)
但后来我得到了:
NotImplementedError
我的第二个选择是创建csr_matrix
具有不同形状的新东西:
z = csr_matrix(x,shape=(3,3))
Run Code Online (Sandbox Code Playgroud)
但这也失败了:
NotImplementedError:未对csr_matrix实施重新整形.
编辑:使用csc_matrix带来了同样的错误.
有任何想法吗?
谢谢
在CSR格式中,所需的底层data
,indices
和indptr
数组y
与x
矩阵的相同.您可以csr_matrix
使用new 将它们传递给构造函数shape
:
y = csr_matrix((x.data, x.indices, x.indptr), shape=(2, 3))
Run Code Online (Sandbox Code Playgroud)
注意构造默认copy=False
,所以这将共享data
,indices
以及indptr
之间x
和y
.一些操作y
将反映在x
.你可以通过copy=True
做x
和y
相互独立的.
如果您想要查看未记录csr_matrix
的内部_shape
属性,可以设置内部属性以使x
数组具有您想要的形状:
x._shape = (2, 3)
Run Code Online (Sandbox Code Playgroud)
这样做并没有什么优势.
归档时间: |
|
查看次数: |
3160 次 |
最近记录: |