#python #numpy #append
Вопрос:
Я пытаюсь запустить алгоритм дерева решений для набора данных на основе метода, используемого здесь.
Я очистил данные, и все в порядке, основываясь на примере из среды.
Я пытаюсь определить функцию:
def datasets (df, x_len = 12, y_len = 1, y_test_len = 12):
D = df.values
periods = D.shape[1]
#Training Dataset Creation
loops = periods 1 - x_len - y_len - y_test_len
train = []
for col in range(loops):
train.append(D[:,col:col x_len y_len])
train = np.vstack(train)
X_train, Y_train = np.split(train, [x_len], axis = 1)
#Test set creation
max_col_test = periods - x_len - y_len 1
test = []
for col in range(loops, max_col_test):
test.append(D[:,col:col x_len y_len])
test = np.vstack(test)
X_test, Y_test = np.split(test, [x_len], axis = 1)
Создание обучающего набора данных работает просто отлично, но в части кода создания тестового набора я получаю эту ошибку:
AttributeError: 'numpy.ndarray' object has no attribute 'append'
Я не понимаю, что это происходит, так как в первом цикле это работает просто отлично, так что что-то явно ускользает от моей логики.
Комментарии:
1.
train
произведеноvstack
массивом, а не списком.2. Привет @hpaulj, но при создании тестового набора я больше не использую поезд. Ошибка, которую я получаю,примерно такая: строка 43, в тесте наборов данных.добавить(D [:, col:col x_len y_len])
Ответ №1:
for col in range(loops):
train.append(D[:,col:col x_len y_len])
train = np.vstack(train)
X_train, Y_train = np.split(train, [x_len], axis = 1)
ошибка содержится в приведенном выше коде.
После train = np.vstack(train)
train
этого становится массивом numpy , а не списком, поэтому на следующей итерации вы добавите значение в массив numpy, у которого нет append
метода, отсюда и ошибка.
Комментарии:
1. Большое спасибо за вашу проницательность. Видите ли вы быстрое решение этой проблемы? Есть ли способ обойти это или это проблема со всей основной логикой кода?
2. мне кажется, вы хотите получить все X примеров, а затем разделить их на обучающие и тестовые, верно ? и то же самое касается целевых значений . если это так , то вы можете знать часть (массива D), которую вы хотите взять , вместо того , чтобы делать это в цикле for, таким образом вы уменьшите сложность, а также сможете решить проблему .
3. Большое спасибо Хусаму за вашу проницательность. Я перейду к более общему подходу к алгоритму.