Numpy: не может создать двумерный массив кортежей

1

У меня проблема с конструктором массива numpy. Я хочу инициализировать двухмерный массив с помощью кортежей, но он не работает как с целыми числами:

>>> A = array([[0, 0], [3, 5]])
>>> print(A)
[[0 0]
[3 5]]
>>> A[1, 1] = 7
>>> print(A)
[[0 0]
[3 7]]
>>> A = array([[(0, 0), (0, 1)], [(1, 0), None]], dtype=object)
>>> A[1, 1] = (2, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: invalid index
>>> A.shape
(2,)

Мне действительно нужно заполнить эту матрицу "вручную". Есть идеи?

Теги:
numpy

1 ответ

3
Лучший ответ

Ваш код работает для меня (используя явное пространство имен numpy). Я использую numpy v1.6.1:

In [8]: import numpy as np
In [9]: A = np.array([[(0, 0), (0, 1)], [(1, 0), None]], dtype=object)

In [10]: A[1, 1] = (2, 3)

In [11]: A.shape
Out[11]: (2, 2)

In [12]: A
Out[12]: 
array([[(0, 0), (0, 1)],
       [(1, 0), (2, 3)]], dtype=object)

Какую версию numpy вы используете?

Обновление Это похоже на проблему, связанную с версией numpy, так как я могу воспроизвести ошибку OP с использованием numpy v1.5.1 (версия, которая поставляется в комплекте с базовым python install в OSX Lion). Я не уверен, что это была ошибка в numpy, которая была исправлена или изменение в реализации. Я бы либо обновился до более новой версии numpy, либо использовал это обходное решение:

>>> A = np.array([[(0, 0), (0, 1)], [(1, 0), None]], dtype=object)
>>> A[1][1] = (2,3)
>>> A
array([[(0, 0), (0, 1)], [(1, 0), (2, 3)]], dtype=object)

Update # 2 Вот общее исправление, которое, надеюсь, вы сможете адаптировать:

>>> C = np.empty((2,2),object)
>>> B = [[(0, 0), (0, 1)], [(1, 0), None]]
>>> C[:] = B
>>> C
array([[(0, 0), (0, 1)],
       [(1, 0), None]], dtype=object)
>>> C.shape
(2, 2)
>>> C[1,1] = (2,3)
>>> C
array([[(0, 0), (0, 1)],
       [(1, 0), (2, 3)]], dtype=object)
  • 0
    У меня тоже работает, используя NumPy 1.6.1 на Windows.
  • 0
    Я использую 1.5.1
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню