2010-10-30 4 views
0

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

(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 

The (???????????) является частью я не понимаю. Вы можете объяснить?

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

Спасибо.

ответ

1

Из документации дописывания:

 
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) не является то, что вы не указали ось аргумента для первого Append, х сплющивается, а значит, и второй append не удается, поскольку формы больше не совпадают.

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

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