[英]Scipy ValueError: Total size of new array must be unchanged
我目前正在使用Scipy 0.7.2和Numpy 1.4.1。 我的Python版本是2.6.6。 我編寫了一個簡單的代碼來從.mtx
文件中讀取一個.mtx
稀疏矩陣,如下所示:
data = scipy.io.mmread('matrix.mtx')
在運行代碼時,我收到以下錯誤:
Traceback (most recent call last):
File "read_mat.py", line 31, in <>
data = scipy.io.mmread('matrix.mtx')
File "/usr/lib64/python2.6/site-packages/scipy/io/mmio.py", line 52, in mmread
return MMFile().read(source)
File "/usr/lib64/python2.6/site-packages/scipy/io/mmio.py", line 273, in read
return self._parse_body(stream)
File "/usr/lib64/python2.6/site-packages/scipy/io/mmio.py", line 417, in _parse_body
flat_data = flat_data.reshape(-1,3)
ValueError: total size of new array must be unchanged
我查了SO一些問題,發現它可能是一些特定版本的問題,然而,根據這個 ,它已被定格在我的版本。 誰能告訴我我能在這做什么? 提前致謝!
編輯 :我嘗試打開一個不同的文件,它被閱讀。 所以,我想這個問題與我的文件有關。 我正在粘貼以下兩個文件的前幾行:
打開的文件:
%%MatrixMarket matrix coordinate integer general
%
1466983 1466983 655955608
1 1 3448
1 2 824
1 3 1492
1 4 132
1 5 426
無法打開的文件:
%%MatrixMarket matrix coordinate integer general
%
11162 11162 233925
1 2 1
1 3 1
1 4 1
1 16 1
1 19 1
回溯的最后幾行表明可能存在的問題:數據文件被讀取為平坦(1D)數組,然后scipy嘗試將數組重新整形為(n,3)數組,該數組失敗。 這意味着平面數組的大小不是三的倍數(如果你試圖重塑np.ones(4).reshape(-1, 3)
你會得到相同的錯誤。
平面數組不是三個數組的事實意味着在一行的某個地方,一個數字缺失。 那個,或者一行(或多行)在某種程度上是畸形的。 它可能只是截止的最后一行,很容易檢查。
如果你在* nix上,你可以使用awk
來檢查:
awk '{ print NF }' matrix.mtx | grep -v 3
應該顯示沒有由空格分隔的3列的行。
您也可以使用awk刪除壞行:
awk '(NF == 3 || NR < 3) { print $0 }' matrix.mtx > goodmatrix.mtx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.