問題タブ [memoryview]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - メモリビューとバイトをサポートする `write()` メソッドを実装する最良の方法は何ですか?
バックグラウンド
write()
「wb」モードのファイル オブジェクトのメソッドは、メモリビューとバイトの両方をサポートします。
pyserial の推奨される方法を使用すると、次のようになりますreadline()
。
エラーが発生しました: IOError: raw write() returned invalid length 22
。
ser.write()
これをデバッグしたところ、 from
に渡されたオブジェクトがオブジェクトであることがわかりましio.BufferedRWPair
たmemoryview
。そして、渡されたオブジェクトを変換するser.write()
ために使用するコードではbytes(data)
、「<memory at 0x061F54E0>」のようなものを取得します。
質問
メソッドを実装する必要がある場合、オブジェクトとオブジェクトwrite()
の両方を処理できる最適なメソッドは何ですか?memoryview
bytes
以下は私が思いついたものです:
- 使用する
isinstance()
data = memoryview(data).tobytes()
python - Numpy セット配列メモリ
numpys メモリ ビューに関する質問があります。
メモリを備えた 2 つの配列があるとします。
これら ( x
, y
) をフレームワークで使用するため、ユーザーが自分でリンクしている可能性があるため ( のようにy_ref
)、それらを再定義することはできません。ここで、彼らの記憶を 1 つのビューにまとめたいと思います。したがって、単一のビューはp
、メモリを両方の配列と共有するとします。
私は次の方法でそれを行いましたが、これがメモリリークを引き起こすかどうかはわかりません:
したがって、単一のビューp
または配列のいずれかを操作できるようになり、それらへのすべての参照を再定義する必要がなくなりました。
y_ref
アップデートもあります:
これは、配列のメモリを別の配列へのビューに設定する正しい方法ですか?
私が露骨に見逃している配列のメモリを統合する明白な方法はありますか?
x
との古いデータ バッファがy
現在スコープ外であるため、どうなるかはわかりません。それらは割り当て解除されますか?
更新ありがとう @Jaime:
p.size
私が適用しているデータセット(微生物学)では、非常に大きくなる可能性があります(数十億)。また、このテーマは潜在的に深い構造を持つフレームワークで使用されるため、すべてのローカル バージョンを更新するとコストがかかる可能性があります。すべてのパラメータの更新は最適化ループで行う必要があるため、すべてをメモリに保持することが重要です。
実際、あなたのアプローチは私が最初に得たものでした.python階層トラバーサルを使用してすべてのローカルコピーを更新するのは非効率的だったからです。
python - cythonのnumpyデータをビューに割り当てる
linalg 逆関数 (la.inv) の出力を cython のビューに割り当てようとしています。残念ながら、これは機能しません。la.inv() の出力を一時的な ndarray オブジェクトにいつでも割り当てて、その内容をビューにコピーできます。
それを行うより良い方法はありますか?
出力:
python - nD 配列を反復処理する一般的な関数
Cython を使用して、異なる次元の配列に対して機能する高速な一般関数を作成する方法はありますか? たとえば、関数のエイリアスを解除するこの単純なケースの場合:
ここでは、1 次元、2 次元、3 次元の場合に 3 つの関数が必要です。すべての (妥当な) ディメンションに対して機能する関数を作成する良い方法はありますか?
PS:ここでは、メモリビューを使用しようとしましたが、これが正しい方法かどうかはわかりません。if where_dealiased[i0]: data[ik, i0] = 0.
コマンドによって生成された注釈付きのhtmlで線が白くないことに驚いていcython -a
ます。何か問題がありますか?
python - Cython Memoryview を効率的に初期化する
MemoryView
現在、Cythonpyx
ファイルで s を次のように設定しています。
pyx
ファイルをコンパイルすると、結果の注釈付きファイルに濃い黄色で表示さcython -a foo.pyx
れる行が表示されます (多くの Python 呼び出しがあり、速度が低下していることを意味します)。cdef int[:] x = np.empty(10)
html
型付けされた Memoryview をより適切にインスタンス化するにはどうすればよいですか?
python - Cythonの新しいスタイルのバッファオブジェクトでCポインタと長さをラップする方法は?
Cython で Python 2.7 拡張モジュールを作成しています。 C ライブラリから提供されたメモリのチャンクをラップする新しいスタイルのバッファ インターフェイスを実装する Python オブジェクトを作成するにはどうすればよいですか? メモリのチャンクは単なるバイト文字列であり、構造体や多次元配列ではありません。ポインターと長さ、およびポインターの有効期間に関する詳細が与えられconst void *
ます。
メモリをコピーできません。アプリケーションのパフォーマンスが低下します。
古いスタイルのバッファ オブジェクトでは単純に を使用できPyBuffer_FromMemory()
ましたが、新しいスタイルのバッファ オブジェクトを生成する同様に簡単な方法が見つからないようです。
バッファ インターフェイスを実装する独自のクラスを作成する必要がありますか? または、Cython はこれを行う簡単な方法を提供していますか?
Cython のドキュメントからUnicode と Passing StringsとTyped Memoryviewsのページを読みましたが、ドキュメントは不正確で完全ではなく、私がやりたいことに似た例はありません。
これが私が試したことです(test.pyx
):
python - Cython 型付きメモリビューを使用して Python から文字列を受け入れる方法は?
型指定された memoryviewとしてバイト文字列オブジェクト (通常の文字列、bytearray、またはbuffer protocolに従う別のオブジェクト) を取る Cython 関数を作成するにはどうすればよいですか?
Unicode and Passing Strings Cython チュートリアル ページによると、次のように動作するはずです。
bytearray やその他の書き込み可能なバッファーでは機能します。
ただし、通常の文字列やその他の読み取り専用のバッファー オブジェクトでは機能しません。
生成された C コードを見ると、Cython は常にPyBUF_WRITABLE
フラグをPyObject_GetBuffer()
に渡しています。これが例外を説明しています。
自分で手動でバッファ オブジェクトのビューを取得できますが、それほど便利ではありません。
何か間違ったことをしていますか、それとも Cython は型指定された memoryview オブジェクトへの読み取り専用バッファ オブジェクト (通常の文字列など) の強制をサポートしていませんか?