Python Numpy ndarray - PullRequest
       5

Python Numpy ndarray

0 голосов
/ 30 октября 2010

У меня есть 3 фрагмента кода:

(1)

x = array([[]]) #x.ndim=2
x=append(x,[[1,2]]) #after this, x.ndim=1???????????????????
x=append(x,[[3,4]],axis=0) #error b/c dimension

(2)
    x = array([[]]) #x.ndim=2
    x=append(x,[[1,2]],axis=0) #error b/c dimension?????????????????

(3)
    x=append([[1,2]],[[3,4]],axis=0) #Good

(???????????) - это часть, которую я не понимаю. Вы можете объяснить?

Я предпочитаю (2), который сначала объявляет numpy.ndarray из 2 осей, а затем добавляет данные. Как я могу это сделать?

Спасибо.

1 Ответ

1 голос
/ 30 октября 2010

Из прилагаемой документации:

Definition:     append(arr, values, axis=None)
Docstring:
    Append values to the end of an array.                                                                      

    Parameters
    ----------
    arr : array_like
        Values are appended to a copy of this array.
    values : array_like
        These values are appended to a copy of `arr`.  It must be of the
        correct shape (the same shape as `arr`, excluding `axis`).  If `axis`
        is not specified, `values` can be any shape and will be flattened
        before use.
    axis : int, optional
        The axis along which `values` are appended.  If `axis` is not given,
        both `arr` and `values` are flattened before use.

Вот почему ваш пример (1) терпит неудачу в том, что, поскольку вы не указываете аргумент оси для первого добавления, x сглаживается, и, следовательно, второе добавление не выполняется, так как формы больше не совпадают.

Ваш второй пример не удался, потому что формы не совпадают. В начале x.shape = (1,0), то есть 1 строка и 0 столбцов. Затем вы пытаетесь добавить массив с формой (1,2) вдоль 0-й оси (то есть вы хотите, чтобы массив результатов имел больше строк, но такое же количество столбцов), что, конечно, не работает, так как число столбцов не совпадает.

Кстати, лично я почти никогда не использую append () при работе с numpy. Гораздо эффективнее выделить правильный размер заранее, а затем использовать нарезку для его заполнения, а не добавлять, что подразумевает перераспределение и копирование каждый раз.

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