Scipy ValueError: Total size of new array must be unchanged
Scipy ValueError: Total size of new array must be unchanged
我目前正在使用 Scipy 0.7.2 和 Numpy 1.4.1。我的 Python 版本是 2.6.6。我编写了一个简单的代码来从 .mtx
文件中读取一个 coo 稀疏矩阵,如下所示:
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 的问题,发现它可能是一些特定于版本的问题,但是,根据 this,它已在我的版本中得到修复。谁能告诉我我能在这里做什么?提前致谢!
编辑:我尝试打开一个不同的文件,它被读取了。所以,我想问题出在我的文件上。我正在粘贴以下两个文件的前几行:
打开的文件:
%%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 [=11=] }' matrix.mtx > goodmatrix.mtx
我目前正在使用 Scipy 0.7.2 和 Numpy 1.4.1。我的 Python 版本是 2.6.6。我编写了一个简单的代码来从 .mtx
文件中读取一个 coo 稀疏矩阵,如下所示:
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 的问题,发现它可能是一些特定于版本的问题,但是,根据 this,它已在我的版本中得到修复。谁能告诉我我能在这里做什么?提前致谢!
编辑:我尝试打开一个不同的文件,它被读取了。所以,我想问题出在我的文件上。我正在粘贴以下两个文件的前几行:
打开的文件:
%%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 [=11=] }' matrix.mtx > goodmatrix.mtx