使用Python中的numpy将矩阵转换为密集矩阵列的幂
我试图获得一个矩阵beta VxK中的所有值,乘以密集矩阵VxN中一列Vx1中所有值的幂。所以beta中的每个值都应该是列中相应行的幂,这应该对beta中的所有K列进行。当我使用np.power on python进行测试版的numpy数组实践时,使用:使用Python中的numpy将矩阵转换为密集矩阵列的幂,python,numpy,matrix,sparse-matrix,Python,Numpy,Matrix,Sparse Matrix,我试图获得一个矩阵beta VxK中的所有值,乘以密集矩阵VxN中一列Vx1中所有值的幂。所以beta中的每个值都应该是列中相应行的幂,这应该对beta中的所有K列进行。当我使用np.power on python进行测试版的numpy数组实践时,使用: np.power(head_beta.T, head_matrix[:,0]) 我能够得到我想要的结果。对于β,尺寸为(3,10),对于头_矩阵[:,0],尺寸为(10,),在这种情况下,3=K,10=V 然而,如果我在我的实际矩阵上这样做
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()
如果数据、行和列是数组,我无法执行相同的操作:
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) `
ValueError回溯(最近一次调用)
在()
---->1 np.幂(beta.T,矩阵[:,0])
ValueError:操作数无法与形状一起广播(1030784)(30784,1)`
看起来区别在于矩阵是一个矩阵(长度,1),而head_矩阵实际上是我创建的一个numpy数组(长度)。如何对密集矩阵的列执行相同的操作?您可以对数组使用
挤压方法来消除这个额外维度。
所以
np.power(beta.T,matrix[:,0].squeeze())
应该可以做到这一点。在问题案例中,它不能播放(1030784)
和(30784,1)
。正如您所注意到的,当(10,N)
与(N,)
一起使用时,它会起作用。这是因为它可以将(N,)
扩展到(1,N)
,然后再扩展到(10,N)
矩阵总是二维的,所以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].squeak()
和M[:,0].ravel()
都生成一个(1,N)
矩阵。M[:,0]也是如此。重塑(-1)
。只要返回一个矩阵
,2d质量是持久的
M[:,0].A1
生成一个(N,)数组
不久前:从技术上讲,使用np.matrix
挤压
并没有去除额外的维度,它只是将形状更改为(1,N)
,就像ravel
。您的修复np.power(beta,M[:,0])
会给出同样的结果吗?不应该是np.power(beta,M[:,0]).T
来补偿修改beta
而不是beta.T
?是的,T
之后要精确匹配。
A = sparse.....toarray()
np.power(beta.T, A[:,0])