簡體   English   中英

Scipy ValueError:新數組的總大小必須保持不變

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM