gpt4 book ai didi

python - 使用 csc_matrix() 将 Matlab sparse() 代码转换为 numpy/scipy

转载 作者:太空宇宙 更新时间:2023-11-04 01:38:10 24 4
gpt4 key购买 nike

我是 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
numpoints = 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 索引从 0 开始,而 Matlab 索引从 1 开始。因此,对于大小为 57344array,在 Python 中第一个元素是 arr[0],最后一个元素是 arr[57343 ]

您的变量 j 的值从 157344。你可能看到了问题。像这样创建你的 j 可以解决问题:

j = np.floor(np.arange(0,size, dtype=np.double)/expan)

不过,最好在使用前检查一下...

关于python - 使用 csc_matrix() 将 Matlab sparse() 代码转换为 numpy/scipy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7760937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com