我有點新手既Matlab的和Python的等等,很多道歉,如果這個問題有點愚蠢......問題將Matlab的稀疏()代碼numpy的/ SciPy的與csc_matrix()
我試圖用numpy和scipy將一些Matlab代碼轉換爲Python,並且事情一直很好,直到我到達有人寫的稀疏矩陣。 Matlab代碼如下所示:
unwarpMatrix = sparse(phaseOrigin, ceil([1:nRead*nSlice*nPhaseDmap]/expan), 1, numPoints, numPoints)/expan;
這是我的Python代碼(與我的思考過程)導致我嘗試轉換。對於給定的數據集I與測試(在Matlab和Python)的:
NREAD = 64
nslice = 28
nphasedmap = 3200
EXPAN = 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代碼不會發生......
我究竟做錯了什麼?我顯然已經搞砸了......非常感謝您的幫助!
嗯...我不認爲這是我有,因爲LEN(問題j)= 5734400(這是我想要的),並且我確實需要j [0] = 1 – NJM
@NJM:'j'的長度不是問題,而是'max(j)= 57344'。 'j'保存列信息,如果用「1」表示*第一列*,那麼你肯定會希望在Python **中使用'j [0] = 0' **。檢查這個鏈接的Python(numpy&scipy)和Matlab之間的差異:http://www.scipy.org/NumPy_for_Matlab_Users – Avaris
啊,我明白你現在說的話。它看起來像我可能需要查看我的phaseorigin變量,因爲它的max()似乎也是57344.00。謝謝。 – NJM