我正在尝试将以下MatLab代码转换为Python:
W2 = sparse(1:m*n-1,2:m*n,-w_alpha(1),m*n,3*m*n);
在MatLab中,输出应采用以下格式:
(1,2) -10
(2,3) -10
(3,4) -10
(4,5) -10
..............
...............
以下是我的python代码:
i=np.int64(np.dot(m,n)-1) #------>m*n-1----->i=102
test_j=np.int64(np.dot(m,n))#------->m*n
j=np.int64(np.dot(3,test_j)) #------>3*m*n----> j=309
a=((np.arange(0,i)).reshape(1,-1))
b=(np.arange(1,test_j)).reshape(1,-1)
W2=csr_matrix((-w_alpha,(a,b)),shape=(test_j,j))
哪里
m=103
n=1
weights = [10,10,10]
w_alpha = np.float64(weights[0]);
然而,语法是不正确的。我使用了scipy库中的以下语法:csr_Matrix((data,(row_ind,colind)),[Shape=(M,N)]),其中data、row_ind和colind满足关系a[row_ind[k],colind[k]]=data[k]。
此外,我还收到以下错误消息:TypeError:Len()of Unsired Object
任何建议,以获得类似的输出与matlab。
2条答案
按热度按时间jljoyd4f1#
好的,我想这就是你要找的东西。基本问题是,在传递
-w_alpha
的位置,需要传递一个包含N个-w_alpha
副本的数组。产出:
wgxvkvu92#
在Octave中,使用
w_alpha=10
时,显示实际上是:因此,您可能希望改用
sparse.csc_matrix
。而且参数必须是具有匹配大小的一维数组。您的a
和b
是(1102)。在matlab中,一切都是二维的,在numpy
中,事物可以是一维的,而且在某些情况下必须是一维的。如果将matlab矩阵保存为文件(旧样式),
scipy.io.loadmat
可以将其加载为csc
。