【发布时间】:2011-12-07 08:06:27
【问题描述】:
我对 Matlab 和 Python 都是一个新手,所以如果这个问题有点愚蠢,请多多道歉......
我正在尝试使用 numpy 和 scipy 将一些 Matlab 代码转换为 Python,并且在我到达某人编写的稀疏矩阵之前一切都很好。 Matlab 代码如下:
unwarpMatrix = sparse(phaseOrigin, ceil([1:nRead*nSlice*nPhaseDmap]/expan), 1, numPoints, numPoints)/expan;
这是我尝试转换的 Python 代码(以及我的思考过程)。对于我正在测试的给定数据集(在 Matlab 和 Python 中):
nread = 64
nslice = 28
nphasedmap = 3200
展开 = 100
点数 = 57344
因此,phaseorigin、s 和 j 数组的长度为 5734400(我已经确认创建我的 phaseorigin 数组的函数输出与 Matlab 完全相同的结果)
#Matlab sparse takes: S = sparse(i,j,s,m,n)
#Generates an m by n sparse matrix such that: S(i(k),j(k)) = s(k)
#scipy csc matrix takes: csc_matrix((data, ij), shape=(M, N))
#Matlab code is: unwarpMatrix = sparse(phaseOrigin, ceil([1:nRead*nSlice*nPhaseDmap]/expan), 1, numPoints, numPoints)/expan;
size = nread*nslice*nphasedmap
#i would be phaseOrigin variable
j = np.ceil(np.arange(1,size+1, dtype=np.double)/expan)
#Matlab apparently treats '1' as a scalar so I should be tiling 1 to the same size as j and phaseorigin
s = np.tile(1,size)
unwarpmatrix = csc_matrix((s,(phaseorigin, j)), shape=(numpoints,numpoints))/expan
所以当我尝试运行我的 python 代码时,我得到:
ValueError: column index exceedes matrix dimensions
当我运行 Matlab 代码时,即使数组大小大于定义的矩阵大小,也不会发生这种情况...
我做错了什么?我显然搞砸了……非常感谢您的帮助!
【问题讨论】:
标签: python matlab scipy sparse-matrix