Проблема добавления ndarray с различными формами - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть numpy ndarray с формой (25,2), и я пытаюсь добавить еще одно значение, имеющее форму (2,).

Я пытался использовать метод append, но пока не повезло.

Есть мысли?Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Какие ошибки вы получили с append method?«не везет» - такой же плохой дескриптор, как «не сработал».В правильном вопросе вы должны показать ожидаемое значение вместе с ошибками.Однако эта тема поднимается достаточно часто, чтобы мы могли делать хорошие предположения.

In [336]: a = np.ones((3,2),int)
In [337]: b = np.zeros((2,),int)

Но сначала я буду педантичен и попробую append method:

In [338]: a.append(b)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-338-d6231792f85d> in <module>()
----> 1 a.append(b)

AttributeError: 'numpy.ndarray' object has no attribute 'append'

listsметод добавления;numpy массивы - нет.

Существует функция с ненадежным названием append:

In [339]: np.append(a,b)
Out[339]: array([1, 1, 1, 1, 1, 1, 0, 0])
In [340]: _.reshape(-1,2)
Out[340]: 
array([[1, 1],
       [1, 1],
       [1, 1],
       [0, 0]])

, которая работает - в некотором роде.Но если я прочитаю документы и укажу параметр оси:

In [341]: np.append(a,b, axis=0)
...
-> 5166     return concatenate((arr, values), axis=axis)
ValueError: all the input arrays must have same number of dimensions

Теперь он просто вызывает np.concatenate, превращая 2 аргумента в список.

Если это ошибкаВы получили и не поняли этого, возможно, вам придется просмотреть основные документы о размерах и формах.

a - это 2d, b - это 1d.Чтобы объединить, нам нужно изменить форму b, чтобы она была (1,2), форма, которая совместима с (3,2) из ​​a.Есть несколько способов сделать это:

In [342]: np.concatenate((a, b.reshape(1,2)), axis=0)
Out[342]: 
array([[1, 1],
       [1, 1],
       [1, 1],
       [0, 0]])

Держитесь подальше от np.append;это слишком запутанно для многих новичков и не добавляет ничего существенного к базе concatenate.

0 голосов
/ 26 апреля 2018

Для добавления, чтобы работать таким образом, вам необходимо выполнить два условия, указанные в документации .

  1. Присоединенный объект должен иметь одинаковые размеры.Он должен иметь форму (1, 2).
  2. Необходимо указать ось для объединения, в противном случае numpy сгладит массивы.

Например:

import numpy
x = numpy.ones((3, 2))
y = [[1, 2]]
numpy.append(x, y, axis=0)

Результаты в:

array([[ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  1.],
       [ 1.,  2.]])
...