大きな行列(配列)構造(3軸)を作成する必要があり、各要素はPythonオブジェクト(myclassインスタンス)への参照を格納する必要があります。そのような配列を作成するためにnumpyを使用することは可能ですか? Pythonリファレンスを格納するために使用するデータ型はどれですか? numpyの利点は、さまざまなレベルでのスライスのサポートです。代わりにネストされた(ネストされた)リストを作成することですが、それは厄介な解決策です。NumPyとオブジェクト参照を持つPython 3
3
A
答えて
2
dtype=object
を使用して、Pythonオブジェクトを配列に格納します。
import numpy as np
class Foo: pass
arr=np.empty(2,dtype=object)
arr[:]=[Foo(),Foo()]
print(arr)
# [<__main__.Foo instance at 0xb7827d0c>
# <__main__.Foo instance at 0xb748b5ac>]
print(arr.dtype)
# object
1
ちょうどDTYPEとしてobject
を与え、そしてあなたが欲しいものを保存することができます。
import numpy
print numpy.array([['a', (2, 2)], [1, 2+3j], [open, xrange(7)]], dtype=object)
あなたがmyclass
代わりのobject
を使用する場合がありますので、認識されないタイプは、このように動作します。 object
は、numpyの最適化なしで任意のオブジェクトを格納することを明確にしています。詳細については、the docsを参照してください。
1
あなたは特別な何もする必要はありません。これは、箱から出して動作します:
>>> import numpy
>>> class TheClass(object):
... pass
...
>>> numpy.array([TheClass(), TheClass()])
array([<__main__.TheClass object at 0x10d435a50>,
<__main__.TheClass object at 0x10d435a90>], dtype=object)
numpyのが自動的に検出配列オブジェクトは、などの標準スカラ型(float型、int型、の一つではないこと。)これを自動的にdtype
をobject
に設定して処理します。
関連する問題
- 1. 循環参照を持つオブジェクトのin_array
- 2. Python/Numpyで3つの出力を持つMatlab polyval関数
- 3. 3つの変数を持つnumpyヒストグラム
- 4. 3つの子レベルを持つMongoDBのネストされた参照
- 5. python numpyとメモリ効率(参照渡しと値渡し)
- 6. 角度.extend私はオブジェクトの配列を持つオブジェクト参照
- 7. 逆numpy参照デカルト積
- 8. python 3 - tkinter - ttk treeview:列テキストを参照
- 9. WPF:重複するオブジェクト参照を持つSelectedItems
- 10. オブジェクト参照を保持する
- 11. 共有numpy配列を持つPythonマルチプロセッシング
- 12. Javaのオブジェクトと参照
- 13. Python-私は.csvファイル(画像参照)を持つ新しいタイムスタンプ
- 14. Pythonでオブジェクトへの参照をすべて見つける
- 15. 参照型メンバーを持つC#参照型
- 16. Pythonで同じオブジェクトを参照するオブジェクトのリスト
- 17. 表示各ピクセルのRGBA値を参照TkinterのとPython 3
- 18. Javaで循環参照を持つオブジェクトのequalsとhashCodeを実装する
- 19. Java:元のオブジェクト参照を含むオブジェクト内のオブジェクト参照
- 20. 参照先のスレッドとオブジェクト
- 21. ヒープと参照のオブジェクト
- 22. Socket.ioとKeystone - 参照socket.ioオブジェクト
- 23. 単純なnumpyの配列参照
- 24. Swift 3の参照
- 25. C++オブジェクト参照
- 26. オブジェクト参照が
- 27. オブジェクト参照が
- 28. オブジェクト参照コンパイルエラー
- 29. 自己参照エンティティを持つAutoMapperマップエンティティ
- 30. 弱い参照を持つJavaシングルトン
あなたが興味があるのであれば、numPyがオブジェクトへのポインタをdtype 'object'の配列に格納するだけであることを調べることができます:' x = object(); a = np.array([x、x]); struct.unpack( '2L'、ctypes.string_at(a.ctypes.data、8)) '(32ビットPython)。 – eryksun
@eryksun: 'ctypes.string_at(a.ctypes.data、8)'を単純でより一般的な 'a.tostring()'に置き換えることができます。 – EOL
@eryksun:あなたのコメントを+1しました: 'ctypes.string_at()'は本当に興味深い関数です。 :) – EOL