Krótka odpowiedź: nie możesz. NumPy nie obsługuje natywnie tablic strzępiastych.
Długa odpowiedź:
>>> a = ones((3,))
>>> b = ones((2,))
>>> c = array([a, b])
>>> c
array([[ 1. 1. 1.], [ 1. 1.]], dtype=object)
daje tablicę może lub nie może zachowywać zgodnie z oczekiwaniami. Na przykład. nie obsługuje podstawowych metod, takich jak sum
lub reshape
, i powinieneś traktować to tak, jakbyś potraktował zwykłą listę Pythona [a, b]
(iteruj nad nią, aby wykonywać operacje zamiast używania wektoryzowanych idiomów).
Istnieje kilka możliwych obejść; najłatwiej jest zmusić a
i b
do wspólnej długości, być może używając masked arrays lub NaN do sygnalizowania, że niektóre indeksy są nieprawidłowe w niektórych wierszach. Na przykład. oto b
jako maskowane tablicy:
>>> ma.array(np.resize(b, a.shape[0]), mask=[False, False, True])
masked_array(data = [1.0 1.0 --],
mask = [False False True],
fill_value = 1e+20)
ten może być łączony z a
następująco:
>>> ma.vstack([a, ma.array(np.resize(b, a.shape[0]), mask=[False, False, True])])
masked_array(data =
[[1.0 1.0 1.0]
[1.0 1.0 --]],
mask =
[[False False False]
[False False True]],
fill_value = 1e+20)
(Dla niektórych celów scipy.sparse
może być również interesujące).
dodać do roztworu larsmans', aby znaleźć największy swoimi «postrzępione» tablic, można użyć ' max_entries = max ([len (x) dla x w [a, b]])), i aby automatycznie wygenerować maskę, użyj 'np.concatenate ([np.zeros (len (b), dtype = bool), np .ones (max_entries-len (b), dtype = bool)]) '. –
Z pewnością musi być jakiś sposób! Jeśli tablica jednowymiarowa w numpy przechowuje jedynie wskaźniki obiektów w innych wielowymiarowych tablicach, to dlaczego tablice wielowymiarowe muszą być takie same? Na pewno nie? Pomoc doceniona. – CodeCabbie