Mám numpy_array. Niečo ako [ a b c ]
.
A potom ho chcem pripojiť do iného poľa NumPy (rovnako ako vytvárame zoznamy). Ako vytvoríme pole polí NumPy obsahujúce polia NumPy?
Bezúspešne som sa pokúsil urobiť nasledovné
>>> M = np.array([])
>>> M
array([], dtype=float64)
>>> M.append(a,axis=0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'numpy.ndarray' object has no attribute 'append'
>>> a
array([1, 2, 3])
In [1]: import numpy as np
In [2]: a = np.array([[1, 2, 3], [4, 5, 6]])
In [3]: b = np.array([[9, 8, 7], [6, 5, 4]])
In [4]: np.concatenate((a, b))
Out[4]:
array([[1, 2, 3],
[4, 5, 6],
[9, 8, 7],
[6, 5, 4]])
alebo toto:
In [1]: a = np.array([1, 2, 3])
In [2]: b = np.array([4, 5, 6])
In [3]: np.vstack((a, b))
Out[3]:
array([[1, 2, 3],
[4, 5, 6]])
Chybová správa hovorí za všetko: NumPy polia nemajú metódu append()
. Existuje však voľná funkcia numpy.append()
:
numpy.append(M, a)
Táto funkcia vytvorí nové pole namiesto mutácie M
na mieste. Všimnite si, že použitie numpy.append()
zahŕňa kopírovanie oboch polí. Lepší výkon kódu dosiahnete, ak použijete polia NumPy s pevnou veľkosťou.
Sven povedal všetko, len buďte veľmi opatrní kvôli automatickým úpravám typu pri volaní append.
In [2]: import numpy as np
In [3]: a = np.array([1,2,3])
In [4]: b = np.array([1.,2.,3.])
In [5]: c = np.array(['a','b','c'])
In [6]: np.append(a,b)
Out[6]: array([ 1., 2., 3., 1., 2., 3.])
In [7]: a.dtype
Out[7]: dtype('int64')
In [8]: np.append(a,c)
Out[8]:
array(['1', '2', '3', 'a', 'b', 'c'],
dtype='|S1')
Ako vidíte na základe obsahu, dtype prešiel z int64 na float32 a potom na S1