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?
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))
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]])
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
.
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)
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