#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)