Я пытаюсь перевести проект, который у меня есть в MATLAB, на Python + Numpy, потому что у MATLAB заканчивается нехватка памяти. Файл, который у меня есть, довольно длинный, поэтому я попытался сделать минимальный пример, который показывает ту же ошибку.ValueError при попытке сохранить ndarray (Numpy)
В основном я делаю 2d гистограмму набора данных и хочу сохранить его после некоторой обработки. Проблема в том, что функция numpy.save выдает «ValueError: установка элемента массива с последовательностью», когда я пытаюсь сохранить вывод функции гистограммы. Я не могу найти проблему, когда я смотрю на документы Numpy.
Моей версией Python является 2.6.6, Numpy версии 1.4.1 в дистрибутиве Debian.
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 –
Это странно. Я экспериментировал еще немного: использование библиотеки рассола действительно помогает сэкономить. –
Справка 'savez' говорит 'np.savez (файл, * args, ** kwds)'. У меня такое ощущение, что ваша версия numpy не распаковывает списки. Можете ли вы попробовать с 'np.savez (out_file, * dens)'? –