2016-07-30 4 views
2

У меня есть функция, которая возвращает список. Я думаю, что я использую np.append, чтобы добавить этот список в качестве новой строки в массиве, мое намерение состоит в следующем:Визуализация массива/матрицы numpy

list = 4 5 6 

b = 1 2 3 
b = np.append(b, list) 

продукции;

1 2 3 
4 5 6 

Это не код, который я использую (между ними много шума). Но выход я получаю это:

2016-06-01 PRINT [ 99.86   99.928  99.9   99.875  99.8   89.7933 
    97.60018333 98.903  99.928   0.2801201 98.95   98.93 
    98.87   98.94   99.05   89.097  97.6712  98.87 
    99.59   0.23538903 99.711  99.732  99.725  99.724 
    99.769  89.777  98.12053333 99.68   99.88 
    0.30333219 99.805  99.79   99.743  99.71   99.69 
    89.7728  98.06653333 99.617  99.82   0.28981292 
    99.882  99.879  99.865  99.84   99.9   89.9206 
    98.29823333 99.82  100.08   0.31420778] 

Является ли это 10 столбца на 5 массива строк/матрице или это/массив строк 50 столбца? Я чувствую, что здесь что-то не хватает - или это просто, что на выходе не отображается форма массива?

+0

W hy не получить форму массива от numpy, например. 'b.shape' Ссылка: [numpy.ndarray.shape] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.shape.html) – davedwards

+0

Я вижу только один набор '[]' - поэтому это 1d, массив элементов 1d 50 , Как и ваш закодированный 6-элементный массив. – hpaulj

ответ

3

Правда список Append:

In [701]: alist = [4,5,6] 
In [702]: b=[1,2,3] 
In [703]: b.append(alist) 
In [704]: b 
Out[704]: [1, 2, 3, [4, 5, 6]] 

плохая работа массива:

In [705]: anArray=np.array([4,5,6]) 
In [706]: b=np.array([1,2,3]) 
In [707]: b=np.append(b,anArray) 
In [708]: b 
Out[708]: array([1, 2, 3, 4, 5, 6]) 
In [709]: b.shape 
Out[709]: (6,) 

Здесь я просто сцепляются anArray на b, делая больший массив.

Я уже говорил об этом - np.append не является хорошей функцией. Это слишком похоже на список append, и люди в конечном итоге злоупотребляют им. Либо они пропускают тот факт, что он возвращает новый массив, а не изменения на месте. Или они используют его повторно.

Вот предпочтительный способ сбора списков или массивов и объединить их в один

In [710]: alist = [] 
In [711]: b=np.array([1,2,3]) # could be b=[1,2,3] 
In [712]: alist.append(b) 
In [713]: b=np.array([4,5,6]) # b=[4,5,6] 
In [714]: alist.append(b) 
In [715]: alist 
Out[715]: [array([1, 2, 3]), array([4, 5, 6])] 
In [716]: np.array(alist) 
Out[716]: 
array([[1, 2, 3], 
     [4, 5, 6]]) 
In [717]: _.shape 
Out[717]: (2, 3) 

В результате 2d массив. Список append намного быстрее, чем массив append (который является реальным конкатенатом массива). Создайте список, а затем создайте массив.

Наиболее распространенный способ определения 2d массив является списком списков:

In [718]: np.array([[1,2,3],[4,5,6]]) 
Out[718]: 
array([[1, 2, 3], 
     [4, 5, 6]]) 

np.concatenate является еще одним вариантом для объединения массивов и списков. Если дает больше контроля над тем, как они объединены, но вы должны обратить внимание на размеры входов (вы должны обратить внимание на них в любом случае).

Есть несколько «компоновать» функции, которые оптимизируют размер обработки немного, stack, hstack, vstack и да, append. Стоит посмотреть на их код.

+0

Я думаю, вы сказали 'np.array' в месте, где вы имели в виду' np.append'. – user2357112

+0

Вы правы. Исправленный. – hpaulj

1

вы должны использовать hstack или vstack

import numpy as np 
a = np.array([1, 2, 3]) 
b = np.array([4, 5, 6]) 
np.vstack((a,b)) 

дает

array([[1, 2, 3], 
     [4, 5, 6]]) 

или

np.hstack((a,b)) 

дает

array([1, 2, 3, 4, 5, 6])