Ошибка атрибута: объект «numpy.ndarray» не имеет атрибута «добавить» — что-то ускользает от моей логики

#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. Большое спасибо Хусаму за вашу проницательность. Я перейду к более общему подходу к алгоритму.