2024-04-25 09:25:51 发布
网友
我有这个密码
import numpy as np from scipy.sparse import csr_matrix q = csr_matrix([[1.], [0.]]) ones = np.ones((2, 1))
现在如何在矩阵q上加一列得到结果形状(2,2)? (矩阵q是稀疏的,我不想改变csr的类型)
sparse.hstack的代码是
sparse.hstack
return bmat([blocks], format=format, dtype=dtype)
对于bmat,则blocks是1xN数组。如果它们都是csc,它将执行堆栈的快速版本:
bmat
blocks
1xN
csc
相反地,sparse.vstack与csr矩阵相同
sparse.vstack
csr
A = _compressed_sparse_stack(blocks[:,0], 0)
实际上,考虑到数据是如何存储在csr矩阵中的,添加行(或csc的列)相对容易(如果需要解释,我可以详细说明)。在
否则,bmat会:
# convert everything to COO format # calculate total nnz data = np.empty(nnz, dtype=dtype) for B in blocks: data[nnz:nnz + B.nnz] = B.data return coo_matrix((data, (row, col)), shape=shape).asformat(format)
换句话说,它获取每个块的data、row、col值,将它们串联起来,生成一个新的coo矩阵,最后将其转换为所需的格式。在
data
row
col
coo
sparse易于在格式之间转换。即使是矩阵的显示也可能涉及到转换,对于(i,j) d格式,转换为csr(对于密集/数组)。sparse.nonzero转换为coo。大多数数学转换为csr。通过将csr转换为csc(不改变属性数组),可以将其转置。大部分转换是在编译的代码中完成的,所以您不会看到延迟。在
sparse
(i,j) d
sparse.nonzero
将列直接添加到csr格式需要大量的工作。所有3个属性数组都必须逐行修改。如果需要的话,我可以再次详细说明。在
sparse.hstack
的代码是对于
^{pr2}$bmat
,则blocks
是1xN
数组。如果它们都是csc
,它将执行堆栈的快速版本:相反地,
sparse.vstack
与csr
矩阵相同实际上,考虑到数据是如何存储在
csr
矩阵中的,添加行(或csc
的列)相对容易(如果需要解释,我可以详细说明)。在否则,
bmat
会:换句话说,它获取每个块的
data
、row
、col
值,将它们串联起来,生成一个新的coo
矩阵,最后将其转换为所需的格式。在sparse
易于在格式之间转换。即使是矩阵的显示也可能涉及到转换,对于(i,j) d
格式,转换为csr(对于密集/数组)。sparse.nonzero
转换为coo
。大多数数学转换为csr
。通过将csr
转换为csc
(不改变属性数组),可以将其转置。大部分转换是在编译的代码中完成的,所以您不会看到延迟。在将列直接添加到
csr
格式需要大量的工作。所有3个属性数组都必须逐行修改。如果需要的话,我可以再次详细说明。在相关问题 更多 >
编程相关推荐