使用Python中的numpy将矩阵转换为稠密矩阵列的幂

2024-09-27 04:19:59 发布

您现在位置:Python中文网/ 问答频道 /正文

一列中的所有β值都是Vx1的密集矩阵。所以beta中的每个值都应该是列中相应行的幂,这应该对beta中的所有K列进行。当我使用np.功率在python上为beta版练习numpy数组,使用:

np.power(head_beta.T, head_matrix[:,0]) 

我能得到我想要的结果。对于β,尺寸为(3,10),对于头部矩阵[:,0],尺寸为(10,),在这种情况下,3=K,10=V

但是,如果我在我的实际矩阵上这样做,它是通过

matrix=csc_matrix((data,(row,col)), shape=(30784,72407) ).todense()  

如果data、row和col是数组,则无法执行相同的操作:

np.power(beta.T, matrix[:,0])

其中,β的尺寸为(10,30784),矩阵的尺寸为(30784,1),在这种情况下,10=K,30784=V。我得到以下误差

ValueError                                Traceback (most recent call last)
<ipython-input-29-9f55d4cb9c63> in <module>()
----> 1 np.power(beta.T, matrix[:,0])

ValueError: operands could not be broadcast together with shapes (10,30784) (30784,1) `

看起来不同的是,矩阵是一个矩阵(长度,1),头矩阵实际上是我创建的一个numpy数组(长度,1)。如何对稠密矩阵的列执行相同的操作?你知道吗


Tags: numpydata尺寸np情况矩阵col数组
2条回答

可以对数组使用squeeze方法来消除这个额外的维度。 所以呢 np.power(beta.T, matrix[:,0].squeeze())应该可以。你知道吗

在有问题的情况下,它不能广播(10,30784)(30784,1)。正如您所注意到的,当(10,N)(N,)一起使用时,它可以工作。这是因为它可以将(N,)扩展到(1,N),然后再扩展到(10,N)。你知道吗

M = sparse.csr_matrix(...).todense()

np.matrix,总是2d,所以M(:,0)(N,1)。有几种解决方案。你知道吗

np.power(beta.T, M[:,0].T)  # change to a (1,N)
np.power(beta, M[:,0])      # line up the expandable dimensions

将稀疏矩阵转换为数组:

A = sparse.....toarray()
np.power(beta.T, A[:,0])

M[:,0].squeeze()M[:,0].ravel()都产生一个(1,N)矩阵。M[:,0].reshape(-1)也是如此。只要返回matrix,2d质量是持久的。你知道吗

M[:,0].A1产生一个(N,)数组

很久以前:Numpy matrix to array

相关问题 更多 >

    热门问题