Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.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 将scipy.sparse矩阵转换为等效的MATLAB稀疏矩阵_Python_Matlab_Scipy_Sparse Matrix_Data Conversion - Fatal编程技术网

Python 将scipy.sparse矩阵转换为等效的MATLAB稀疏矩阵

Python 将scipy.sparse矩阵转换为等效的MATLAB稀疏矩阵,python,matlab,scipy,sparse-matrix,data-conversion,Python,Matlab,Scipy,Sparse Matrix,Data Conversion,我有一个scipy.sparse.lil_矩阵,我想将它输入到使用。到目前为止,我看到的帖子要么是关于如何将MATLAB稀疏矩阵转换为python等价物,要么是需要修改MATLAB代码,我宁愿绕开它。在内部,我相信MATLAB使用的是类似于csc的格式。但是构造是(至少在我几年前使用它时)带有coo风格的输入——数据、行、列 我建议在MATLAB中创建一个稀疏矩阵,并将其保存(在HDF5之前的模式下)到.mat中。然后用scipy.io.loadmat加载它。然后在将scipy.sparse矩阵

我有一个
scipy.sparse.lil_矩阵
,我想将它输入到使用。到目前为止,我看到的帖子要么是关于如何将MATLAB稀疏矩阵转换为python等价物,要么是需要修改MATLAB代码,我宁愿绕开它。

在内部,我相信MATLAB使用的是类似于csc的格式。但是构造是(至少在我几年前使用它时)带有
coo
风格的输入——数据、行、列

我建议在MATLAB中创建一个稀疏矩阵,并将其保存(在HDF5之前的模式下)到.mat中。然后用
scipy.io.loadmat
加载它。然后在将
scipy.sparse
矩阵写回
.mat
时,使用该结果作为指南

scipy.sparse
有一个
save
函数,但它使用
np.savez
来编写相应的属性数组。如果您有可以处理
.npy
文件的MATLAB代码,您可能可以加载这样的保存(再次使用
coo
格式)

===

测试

创建并保存稀疏矩阵:

In [263]: from scipy import io, sparse                                                                          
In [264]: M = sparse.random(10,10,.2,'coo')                                                                     
In [265]: io.savemat('sparse.mat', {'M':M})       
Python端的测试负载:

In [268]: io.loadmat('sparse.mat')                                                                              
Out[268]: 
{'__header__': b'MATLAB 5.0 MAT-file Platform: posix, Created on: Wed Jul  3 11:41:23 2019',
 '__version__': '1.0',
 '__globals__': [],
 'M': <10x10 sparse matrix of type '<class 'numpy.float64'>'
    with 20 stored elements in Compressed Sparse Column format>}

因此,它看起来像是
savemat/loadmat
代码以与MATLAB兼容的方式处理稀疏矩阵。

谢谢!我对MATLAB不是很熟悉,因此我认为我不完全理解,还有一些问题有待解决。总而言之,您的意思是我应该在MATLAB中声明一个未指定的稀疏矩阵,用hdf5write将其写入.mat文件?请详细说明“使用该结果作为指导”
scipy.io.loadmat/savemat
使用的是旧版本的MATLAB.mat文件。我认为他们可以在两个方向上处理稀疏矩阵。我不太熟悉其他的转移方式。如果你对MATLAB不太了解,这可能是一个没有希望的任务。好吧,我看看我能走多远。非常感谢!:-)好的,我有机会通过
savemat
scipy.sparse
矩阵发送到倍频程。它起作用了。
>> load sparse.mat
>> M
M =

Compressed Column Sparse (rows = 10, cols = 10, nnz = 20 [20%])

  (4, 1) ->  0.41855
  (6, 1) ->  0.33456
  (7, 1) ->  0.47791
  (4, 3) ->  0.27464
  (2, 4) ->  0.96700
  (3, 4) ->  0.60283
  (10, 4) ->  0.41400
  (1, 5) ->  0.57004
  (2, 5) ->  0.44211
  (1, 6) ->  0.63884
  (3, 7) ->  0.012127
  (8, 7) ->  0.77328
  (8, 8) ->  0.25287
  (10, 8) ->  0.46280
  (1, 9) ->  0.0022617
  (6, 9) ->  0.70874
  (1, 10) ->  0.79101
  (3, 10) ->  0.81999
  (6, 10) ->  0.12515
  (9, 10) ->  0.60660