Невозможно загрузить массивы numpy структурированных массивов, сохраненных в python3, в python2, потому что имена полей являются строками unicode.Загрузка структурированного массива numpy, сохраненного в python3 в python2
$ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
>>> a = np.zeros(4, dtype=[('x',int)])
>>> np.save('a.npy', {'a': a})
>>>
$ python2
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
>>> np.load('a.npy')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/npyio.py", line 393, in load
return format.read_array(fid)
File "/usr/local/lib/python2.7/dist-packages/numpy/lib/format.py", line 602, in read_array
array = pickle.load(fp)
ValueError: non-string names in Numpy dtype unpickling
Это была ошибка NumPy в течение некоторого времени: https://github.com/numpy/numpy/issues/2407
Кто-нибудь есть работа вокруг, чтобы иметь возможность загружать NumPy структурированные массивы из Python3 в python2 (без необходимости загрузки и повторно сохранить в python3)?
Вы столкнулись с этой проблемой из-за странного способа сохранения массива. Почему словарь '{'a': a}'? Если вы используете 'np.save ('a.npy', a)' он загружается отлично в Python 2. Если это потому, что вам нравится хранить несколько массивов в одном файле, вы действительно должны использовать 'np.savez'. –
Да, я пытался хранить несколько массивов в одном файле. Теперь я перешел на 'np.savez' – jmlarson