一列中的所有β值都是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)。如何对稠密矩阵的列执行相同的操作?你知道吗
可以对数组使用
squeeze
方法来消除这个额外的维度。 所以呢np.power(beta.T, matrix[:,0].squeeze())
应该可以。你知道吗在有问题的情况下,它不能广播
(10,30784)
和(30784,1)
。正如您所注意到的,当(10,N)
与(N,)
一起使用时,它可以工作。这是因为它可以将(N,)
扩展到(1,N)
,然后再扩展到(10,N)
。你知道吗是
np.matrix
,总是2d,所以M(:,0)
是(N,1)
。有几种解决方案。你知道吗将稀疏矩阵转换为数组:
M[:,0].squeeze()
和M[:,0].ravel()
都产生一个(1,N)
矩阵。M[:,0].reshape(-1)
也是如此。只要返回matrix
,2d质量是持久的。你知道吗M[:,0].A1
产生一个(N,)数组很久以前:Numpy matrix to array
相关问题 更多 >
编程相关推荐