Istnieją 2 typowych przypadkach użycia np.c_
:
np.c_
może przyjmować sekwencji 1D macierzach takimi:
In [98]: np.c_[[1,2],[3,4]]
Out[98]:
array([[1, 3],
[2, 4]])
lub np.c_
może przyjąć sekwencję 2D array- polubienia:
In [96]: np.c_[[[1,2],[3,4]], [[5,6],[7,8]]]
Out[96]:
array([[1, 2, 5, 6],
[3, 4, 7, 8]])
Tak więc np.c_
może być przekazywana w sposób podobny do tablic 1D lub 2D. Ale to rodzi pytanie, w jaki sposób np.c_
ma rozpoznać, czy dane wejściowe są pojedynczymi tablicami 2D (np. [[1,2], [3,4]]) lub sekwencją podobieństw tablic 1D (np. [1 , 2], [3,4])?
Deweloperzy podjęli decyzję projektową: jeśli np.c_
zostanie przekazana krotka, argument będzie traktowany jako ciąg oddzielnych podobieństw tablic. Jeśli zostanie przekazana nie-krotka (taka jak lista), wówczas obiekt ten będzie traktowany jako pojedynczy układ tablicowy.
Tak więc np.c_[[1,2], [3,4]]
(co jest odpowiednikiem np.c_[([1,2], [3,4])]
) będzie traktować ([1,2], [3,4])
jako dwie oddzielne tablice 1D.
In [99]: np.c_[[1,2], [3,4]]
Out[99]:
array([[1, 3],
[2, 4]])
Natomiast np.c_[[[1,2], [3,4]]]
traktuje [[1,2], [3,4]]
jako pojedynczy 2D tablicy.
In [100]: np.c_[[[1,2], [3,4]]]
Out[100]:
array([[1, 2],
[3, 4]])
Tak więc, w przykładach, opublikowanego:
np.c_[[1,2]]
traktuje [1,2]
jako pojedynczy 1D tablicowej, co oznacza, że [1,2] w kolumnie tablicy 2D:
In [101]: np.c_[[1,2]]
Out[101]:
array([[1],
[2]])
np.c_[(1,2)]
traktuje (1,2)
2 oddzielne array-like, tak umieszcza każdą wartość własną kolumna:
In [102]: np.c_[(1,2)]
Out[102]: array([[1, 2]])
np.c_[(1,2),]
traktuje krotki (1,2),
(co jest równoważne ((1,2),)
) w ciągu jednej tablicy podobne, tak, że tablica, jak jest traktowany jako kolumna:
In [103]: np.c_[(1,2),]
Out[103]:
array([[1],
[2]])
PS.Być może bardziej niż większość pakietów, NumPy ma historię treating lists and tuples differently. Ten link omawia sposób traktowania list i krotek w inny sposób po przekazaniu do np.array
.
Sprawdź kod. Ta i inne klasy/funkcje w pliku ('indexing_tricks'?) To wygodne, ale interesujące kodowanie. – hpaulj