Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python中的numpy将矩阵转换为密集矩阵列的幂_Python_Numpy_Matrix_Sparse Matrix - Fatal编程技术网

使用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 然而,如果我在我的实际矩阵上这样做

我试图获得一个矩阵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

然而,如果我在我的实际矩阵上这样做,这是通过使用

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])