【问题标题】:ValueError when trying to save ndarray (Numpy)尝试保存 ndarray 时出现 ValueError(Numpy)
【发布时间】:2013-05-16 09:38:19
【问题描述】:

我正在尝试将我在 MATLAB 中的一个项目转换为 Python+Numpy,因为 MATLAB 总是内存不足。我拥有的文件相当长,所以我尝试制作一个显示相同错误的最小示例。

基本上,我正在制作数据集的二维直方图,并希望在处理后保存它。问题是当我尝试保存直方图函数的输出时,numpy.save 函数会抛出“ValueError:设置带有序列的数组元素”。当我查看 Numpy 的文档时,我找不到问题。

我的 Python 版本是 2.6.6,Debian 发行版上的 Numpy 版本是 1.4.1。

import numpy as np
import random

n_samples = 5
rows      = 5

out_file = file('dens.bin','wb')

x_bins = np.arange(-2.005,2.005,0.01)
y_bins = np.arange(-0.5,n_samples+0.5)

listy = [random.gauss(0,1) for r in range(n_samples*rows)]

dens = np.histogram2d( listy, \
       range(n_samples)*rows, \
       [y_bins, x_bins])

print 'Write data'
np.savez(out_file, dens)
out_file.close()

完整输出:

$ python error.py 
Write data
Traceback (most recent call last):
  File "error.py", line 19, in <module>
    np.savez(out_file, dens)
  File "/usr/lib/pymodules/python2.6/numpy/lib/io.py", line 439, in savez
    format.write_array(fid, np.asanyarray(val))
  File "/usr/lib/pymodules/python2.6/numpy/core/numeric.py", line 312, in asanyarray
   return array(a, dtype, copy=False, order=order, subok=True)
ValueError: setting an array element with a sequence.

【问题讨论】:

  • 您的代码适用于我在 Ubuntu 12.04、python 2.7 和 numpy 1.6.1 上
  • 这很奇怪。我做了更多实验:使用 pickle 库确实可以保存。
  • “保存”的帮助说np.savez(file, *args, **kwds)。我感觉你的 numpy 版本没有解压列表。你可以试试np.savez(out_file, *dens)吗?

标签: python numpy save


【解决方案1】:

请注意,np.histogram2d 实际上返回三个数组的元组:(hist, x_bins, y_bins)。如果你想保存所有这三个,你必须像@Francesco 所说的那样解压它们。

dens = np.histogram2d(listy,
                      range(n_samples)*rows,
                      [y_bins, x_bins])
np.savez('dens.bin', *dens)

或者,如果您只需要直方图本身,您可以只保存它。

np.savez('dens.bin', dens[0])

如果您想跟踪其中哪个是哪个,请使用**kwds 而不是*args

denskw = dict(zip(['hist','y_bins','x_bins'], dens))
np.savez('dens.bin', **denskw)

然后,你可以像这样加载它

dens = np.load('dens.bin')
hist = dens['hist']# etc

【讨论】:

    猜你喜欢
    • 2015-05-17
    • 2020-10-22
    • 2021-07-11
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多