Как добавить значение в конец массива - PullRequest
0 голосов
/ 01 октября 2019

Очень просто, но понятия не имел об этом. Как мне добавить 4 в конец param_array?

param_array = np.array([[1,2,3]])
print(param_array)
print(param_array.shape)
print()
param_array = np.append(param_array, 4)
print(param_array)
print(param_array.shape)

[[1 2 3]]
(1, 3)

[1 2 3 4]
(4,)

Мне нужен массив

[[1,2,3,4]]

форма должна быть (1,4)

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Объедините массив (1,1) с (1,3), чтобы получить (1,4):

In [168]: arr = np.array([[1,2,3]])                                             
In [169]: arr1 = np.concatenate((arr, np.array([[4]])), axis=1)                 
In [170]: arr1                                                                  
Out[170]: array([[1, 2, 3, 4]])

Использование np.append привело к (4,), потому что,в соответствии с документами:

If `axis` is None, `out` is a flattened array.

Если указать ось в append:

In [172]: np.append(arr, 4, axis=1)                                             
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-172-ca20005ded46> in <module>
----> 1 np.append(arr, 4, axis=1)

<__array_function__ internals> in append(*args, **kwargs)

/usr/local/lib/python3.6/dist-packages/numpy/lib/function_base.py in append(arr, values, axis)
   4698         values = ravel(values)
   4699         axis = arr.ndim-1
-> 4700     return concatenate((arr, values), axis=axis)
   4701 
   4702 

<__array_function__ internals> in concatenate(*args, **kwargs)

ValueError: all the input arrays must have same number of dimensions, but the array at index 0 has 2 dimension(s) and the array at index 1 has 0 dimension(s)

Ошибка в строке concatenate. Вам нужно указать 2d дополнение, как я делал выше:

In [173]: np.append(arr, [[4]], axis=1)                                         
Out[173]: array([[1, 2, 3, 4]])

np.append(A, B, axis) - это просто еще один способ написания np.concatenate((A,B), axis). С обоими вы должны обратить внимание на размеры.

1 голос
/ 01 октября 2019

Чтобы внести изменения, которые вы ищете, вам нужно немного поработать с параметром оси. Однако есть ярлык, который вы можете использовать: создание нового измененного массива после добавления нового элемента.

param_array = np.append(param_array, 4).reshape((1,4))

Он делает именно то, что вы хотите (по крайней мере, я так думаю), и это намного проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...