Numpy: ValueError: не удалось передать входной массив из shape (4,1) в shape (4) - PullRequest
0 голосов
/ 30 апреля 2020

Я использую Python 3,7 с numpy 1.18.3. У меня есть массив, который содержит 4 строки. Мне периодически нужно добавлять новый столбец. Каждый раз, когда я добавляю новую запись в массив, она определяется как 4,1 массива (т).

Иногда я проверяю, будет ли корзина соответствовать распределению (d_entry ниже), и если это произойдет, мне придется вычесть выделение из корзины и обновить столбец.

import numpy как np

t = 4x1 numpy array [[  150], [50000], [30000], [20000]]
d_entry = 4x1 numpy array [[2.6000e+01], [1.1638e+04], [5.0000e+00], [9.8290e+03]]

new_bin = np.subtract(t, d_entry)
bin_space =  np.append(bin_space, new_bin, axis=1)

Так, например, с двумя записями bin мой bin_space выглядит примерно так:

[[  107.   124.], [27798. 38362.], [29992. 29995.], [ 9401. 10171.]]

Время от времени записи (столбцы) пространства bin необходимо обновить, как объяснено, заменяя записи обновленными столбцами 4 x 1.

Для этого я ссылаюсь на столбец bin_space следующим образом:

space_left = np.array(bin_space[:,j])   

(который, по словам PyCharm, теперь является (4,) - не 4,1

bin_space[:,j] = np.subtract(space_left, d_entry)**

Затем я получаю сообщение об ошибке. Я не уверен, как массив может извлечь тот же тип.

Traceback (самый последний последний вызов): файл "D: /Development/oasg-apps/src/mcl/python/mcl_bin_packing.py", строка 398, в main () файле "D: / Development / oasg-apps / src / mcl / python / mcl_bin_packing.py ", строка 247, в основных n_bins, bin_for_item, bin_space = allocate_ffd (d_vectors, t_resource, num_metri cs_types) Файл "D: /Development/oasg-apps/src/mcl/python/mcl_bin_packing.py", строка 135, в allocate_ffd bin_space [:, j] = np.subtract (space_left, d_entry) ValueError: не удалось передать вход массив из формы (4,1) в форму (4)

Это воспроизводит проблему, но с "невозможно передать входной массив из формы (2,1) в форму (2)":

import numpy as np

bin_space = np.array([0, 0])
bin_space = np.reshape(bin_space, (2,1))

# Shape our target resources into a numpy array.
target_resource = np.array([150, 50000])
target_resource = np.reshape(target_resource,(2,1))

new_resource = np.array([10, 200])
new_resource = np.reshape(new_resource,(2,1))

bin_space = np.append(bin_space, target_resource, axis=1)
bin_space = np.append(bin_space, target_resource, axis=1)

bin_space[:,1] =  new_resource

Любая помощь приветствуется.

Спасибо,

Клайв

1 Ответ

0 голосов
/ 30 апреля 2020

Либо:

bin_space[:,1] = new_resource.T

или:

bin_space[:,1] = new_resource.flatten()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...