индекс вне допустимого диапазона - numpy массив - PullRequest
0 голосов
/ 25 мая 2020

что не так в этом коде? не могу ли я просто разрезать первый столбец data и назначить его X?

import numpy as np
data =np.array([[5.2, -1.5], [-4.1, 3], [-12.3, 55]])
print(data)
X = data[:,0]
print('shape of X ', X.shape)
print('X.shape[0] ',X.shape[0])
print('X.shape[1] ',X.shape[1])

он выдает следующее сообщение:

shape of X  (3,)
X.shape[0]  3
Traceback (most recent call last):
  File "shape.py", line 7, in <module>
    print('X.shape[1] ',X.shape[1])
IndexError: tuple index out of range

Ответы [ 2 ]

2 голосов
/ 25 мая 2020

Когда вы определяете X как data[:,0], вы создаете одномерный массив. Поскольку ваш исходный массив data является двумерным, вы можете думать об этом как о выборе только значений индекса-столбца-0 из всех строк. Это означает, что фигура X имеет только 1 элемент.

Итак, X.shape[0] существует (это 3), но X.shape[1] не существует, что приводит к IndexError.

1 голос
/ 25 мая 2020

Обратите внимание, что X содержит array([ 5.2, -4.1, -12.3]), поэтому это массив 1-D .

Это также видно из формы:

shape of X  (3,)

то есть:

  • первый и только размер 3 ,
  • других размеров нет.

Итак, если вы обратитесь к X.shape[1] (несуществующее измерение), вы получите IndexError: tuple index out of range.

Другого пути нет.

Альтернатива: если вы хотите иметь массив 2-D , вы можете запустить:

X2 = data[:, [0]]

Тогда:

  • X2.shape is (3, 1),
  • X2.shape[0] равно 3,
  • X2.shape[1] равно 1.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...