Ошибка IndexError: индекс кортежа вне диапазона при запуске python 3.9.1

#python #arrays #numpy #reshape

#питон #массивы #numpy #изменить форму

Вопрос:

Ошибка при запуске моих кодов

 dataset_total = pd.concat((dataset['Open'], dataset_test['Open']), axis = 0)
inputs = dataset_total[len(dataset_total) - len(dataset_test) - 60:].values
inputs = inputs.reshape(-1,1)
inputs = sc.transform(inputs)
X_test = []
for i in range(60, 80):
   X_test.append(inputs[i-60:i, 0])
X_test = np.array(X_test)
X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
predicted_forex_price = regressor.predict(X_test)
predicted_forex_price = sc.inverse_transform(predicted_forex_price)
 

Результаты :

/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:8: VisibleDeprecationWarning: создание ndarray из неровных вложенных последовательностей (которые представляют собой список или кортеж списков или кортежей или ndarrays разной длины или формы) устарело. Если вы намеревались сделать это, вы должны указать ‘dtype=object’ при создании ndarray

 ---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-110-0e4e370b525c> in <module>()
      7 X_test.append(inputs[i-60:i, 0])
      8 X_test = np.array(X_test)
----> 9 X_test = np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
     10 predicted_forex_price = regressor.predict(X_test)
     11 predicted_forex_price = sc.inverse_transform(predicted_forex_price)

IndexError: tuple index out of range
 

Комментарии:

1. Не могли бы вы распечатать X_test и добавить это в вопрос выше?

2. как я могу это сделать?

Ответ №1:

Ваши фрагменты имеют разную длину, поэтому X_test это не 2-мерный массив, а скорее одномерный массив, каждая запись которого представляет собой массив с противоречивыми формами.

Вот демонстрация проблемы с использованием меньшего массива для удобства:

 inputs = np.arange(3)
X_test = [inputs[i:i   2] for i in range(3)]

print(X_test)
# [array([0, 1]), array([1, 2]), array([2])]

X_test = np.array(X_test)
print(X_test)
# [array([0, 1]) array([1, 2]) array([2])]

np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
# ---------------------------------------------------------------------------
# IndexError                                Traceback (most recent call last)
# <ipython-input-21-769dc2c0479b> in <module>()
#       6 print(X_test)
#       7 # [array([0, 1]) array([1, 2]) array([2])]
# ----> 8 np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))

# IndexError: tuple index out of range
 

Чтобы исправить это, вам необходимо убедиться, что ваша исходная конструкция X_test содержит подмножества входных данных одинаковой длины. Например:

 X_test = [inputs[i:i   2] for i in range(2)]
X_test = np.array(X_test)
np.reshape(X_test, (X_test.shape[0], X_test.shape[1], 1))
# array([[[0],
#         [1]],

#        [[1],
#         [2]]])
 

Комментарии:

1. это работает, но выдает мне предупреждение. . ПРЕДУПРЕЖДЕНИЕ:tensorflow: модель была построена с использованием формы (None, 60, 1) для керастенсора ввода (type_spec= TensorSpec(shape=(None, 60, 1), dtype= tf.float32, name=’lstm_4_input’), name=’lstm_4_input’, description=»создано слоем’lstm_4_input'»), но он был вызван на входе с несовместимой формой (None, 2, 1)