In [863]: a = np.array([1, 2])
In [864]: b = np.array([1])
In [865]: c = np.array([1, 4, 8, 10])
これら3列のリスト:このリストから作ら
In [866]: ll=[a,b,c]
オブジェクトDTYPE配列:
In [867]: A=np.array(ll)
In [868]: A
Out[868]: array([array([1, 2]), array([1]), array([ 1, 4, 8, 10])], dtype=object)
A
に、ll
他の場所のメモリ内のデータ・オブジェクトへのポインタを含むように。メモリ使用量に関しても同様に効率的です。
In [870]: id(A[1]),id(b)
Out[870]: (3032501768, 3032501768)
あなたが例えば付加は1が
In [871]: A+3
Out[871]: array([array([4, 5]), array([4]), array([ 4, 7, 11, 13])], dtype=object)
を期待するかもしれないとして動作しますが、例えば、無速度の利点に少しあります、A
の要素に数学、限られた数の操作を行うことができます
In [876]: timeit [x+3 for x in ll]
100000 loops, best of 3: 9.52 µs per loop
In [877]: timeit A+3
100000 loops, best of 3: 14.6 µs per loop
などnp.max
のようなものは動作しません。あなたはこのケースをケースごとにテストする必要があります。
詳細:Maintaining numpy subclass inside a container after applying ufuncおよびその他のオブジェクト配列の質問。
リストメソッドが十分に効率的でないことをどのように知っていますか? – cxrodgers
パンダのデータフレームはいかがですか? –
どのような意味でリストは効率的ではないでしょうか。記憶?いくつかの配列間の計算?オブジェクトのdtype配列はそれらを保存できますが、リストと基本的に同じ制限があります。 'np.array([a、b、c])'を見てください – hpaulj