numpy łączy dwie tablice pionowo

Próbowałem:

>>> a = np.array([1,2,3])
>>> b = np.array([4,5,6])
>>> np.concatenate((a,b), axis=0)
array([1, 2, 3, 4, 5, 6])
>>> np.concatenate((a,b), axis=1)
array([1, 2, 3, 4, 5, 6])

Jednak spodziewałbym się przynajmniej, że jeden wynik wygląda tak

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

Dlaczego nie jest połączony pionowo?

Author: DSM, 2014-02-19

4 answers

Ponieważ zarówno a, jak i b mają tylko jedną oś, ponieważ ich kształt to (3), a parametr osi odnosi się konkretnie do osi elementów do konkatenacji.

Ten przykład powinien wyjaśnić, co concatenate robi z axis. Weźmy dwa wektory o dwóch osiach o kształcie (2,3):

a = np.array([[1,5,9],[2,6,10]])
b = np.array([[3,7,11],[4,8,12]])

Konkatenuje wzdłuż 1. Osi (rzędy 1., Potem rzędy 2.):

print concatenate((a,b),axis=0)
array([[ 1,  5,  9],
       [ 2,  6, 10],
       [ 3,  7, 11],
       [ 4,  8, 12]])

Konkatenuje wzdłuż 2. osi (Kolumny 1., następnie kolumny 2.):

print concatenate((a,b),axis=1)
array([[ 1,  5,  9,  3,  7, 11],
      [ 2,  6, 10,  4,  8, 12]])

Aby uzyskać prezentowany wynik, możesz użyć

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

Nadal możesz to zrobić z concatenate, ale to trwa dłużej:

a=a.reshape(1,3)
b=b.reshape(1,3)
print concatenate((a,b))
 64
Author: gg349,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-19 17:42:18

Jeśli faktycznym problemem jest połączenie dwóch tablic 1-D w pionie, a nie jesteśmy skupieni na użyciu concatenate do wykonania tej operacji, sugerowałbym użycie np.column_stack:

In []: a = np.array([1,2,3])
In []: b = np.array([4,5,6])
In []: np.column_stack((a, b))
array([[1, 4],
       [2, 5],
       [3, 6]])
 16
Author: Kshitij Saraogi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-12 14:05:54

Niezbyt znaną cechą numpy jest użycie r_. Jest to prosty sposób na szybkie budowanie tablic:

import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.r_[a[None,:],b[None,:]]
print(c)
#[[1 2 3]
# [4 5 6]]

Celem {[2] } jest dodanie osi do tablicy a.

 9
Author: bougui,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-28 07:31:16
a = np.array([1,2,3])
b = np.array([4,5,6])
np.array((a,b))

Działa równie dobrze jak

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

Niezależnie od tego, czy jest to lista list, czy lista tablic 1d, np.array próbuje utworzyć tablicę 2d.

Ale dobrym pomysłem jest również zrozumienie, jak działa np.concatenate i jego rodzina funkcji stack. W tym kontekście concatenate potrzebuje listy tablic 2d (lub wszystkiego, co np.array zamieni się w tablicę 2D) jako wejścia.

np.vstack najpierw pętle, chociaż wejścia upewniają się, że są co najmniej 2d, a następnie łączą się. Funkcjonalnie to to samo, co samodzielne Rozszerzanie wymiarów tablic.

np.stack jest nową funkcją łączącą tablice w nowym wymiarze. Domyślnie zachowuje się tak samo jak np.array.

Spójrz na kod tych funkcji. Jeśli jest napisane w Pythonie można się sporo nauczyć. Dla vstack:

return _nx.concatenate([atleast_2d(_m) for _m in tup], 0)
 3
Author: hpaulj,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-11 17:45:33