問題タブ [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.

0 投票する
0 に答える
651 参照

python - メモリビューとバイトをサポートする `write()` メソッドを実装する最良の方法は何ですか?

バックグラウンド

write()「wb」モードのファイル オブジェクトのメソッドは、メモリビューとバイトの両方をサポートします。

pyserial の推奨される方法を使用すると、次のようになりますreadline()

エラーが発生しました: IOError: raw write() returned invalid length 22

ser.write()これをデバッグしたところ、 from に渡されたオブジェクトがオブジェクトであることがわかりましio.BufferedRWPairmemoryview。そして、渡されたオブジェクトを変換するser.write() ために使用するコードではbytes(data)、「<memory at 0x061F54E0>」のようなものを取得します。

質問

メソッドを実装する必要がある場合、オブジェクトとオブジェクトwrite()の両方を処理できる最適なメソッドは何ですか?memoryviewbytes

以下は私が思いついたものです:

  • 使用するisinstance()
  • data = memoryview(data).tobytes()
0 投票する
1 に答える
372 参照

python - Numpy セット配列メモリ

numpys メモリ ビューに関する質問があります。

メモリを備えた 2 つの配列があるとします。

これら ( x, y) をフレームワークで使用するため、ユーザーが自分でリンクしている可能性があるため ( のようにy_ref)、それらを再定義することはできません。ここで、彼らの記憶を 1 つのビューにまとめたいと思います。したがって、単一のビューはp、メモリを両方の配列と共有するとします。

私は次の方法でそれを行いましたが、これがメモリリークを引き起こすかどうかはわかりません:

したがって、単一のビューpまたは配列のいずれかを操作できるようになり、それらへのすべての参照を再定義する必要がなくなりました。

y_refアップデートもあります:

これは、配列のメモリを別の配列へのビューに設定する正しい方法ですか?

私が露骨に見逃している配列のメモリを統合する明白な方法はありますか?

xとの古いデータ バッファがy現在スコープ外であるため、どうなるかはわかりません。それらは割り当て解除されますか?

更新ありがとう @Jaime:

p.size私が適用しているデータセット(微生物学)では、非常に大きくなる可能性があります(数十億)。また、このテーマは潜在的に深い構造を持つフレームワークで使用されるため、すべてのローカル バージョンを更新するとコストがかかる可能性があります。すべてのパラメータの更新は最適化ループで行う必要があるため、すべてをメモリに保持することが重要です。

実際、あなたのアプローチは私が最初に得たものでした.python階層トラバーサルを使用してすべてのローカルコピーを更新するのは非効率的だったからです。

0 投票する
3 に答える
1248 参照

python - cythonのnumpyデータをビューに割り当てる

linalg 逆関数 (la.inv) の出力を cython のビューに割り当てようとしています。残念ながら、これは機能しません。la.inv() の出力を一時的な ndarray オブジェクトにいつでも割り当てて、その内容をビューにコピーできます。

それを行うより良い方法はありますか?

出力:

0 投票する
2 に答える
109 参照

python - nD 配列を反復処理する一般的な関数

Cython を使用して、異なる次元の配列に対して機能する高速な一般関数を作成する方法はありますか? たとえば、関数のエイリアスを解除するこの単純なケースの場合:

ここでは、1 次元、2 次元、3 次元の場合に 3 つの関数が必要です。すべての (妥当な) ディメンションに対して機能する関数を作成する良い方法はありますか?

PS:ここでは、メモリビューを使用しようとしましたが、これが正しい方法かどうかはわかりません。if where_dealiased[i0]: data[ik, i0] = 0.コマンドによって生成された注釈付きのhtmlで線が白くないことに驚いていcython -aます。何か問題がありますか?

0 投票する
2 に答える
3562 参照

python - Cython Memoryview を効率的に初期化する

MemoryView現在、Cythonpyxファイルで s を次のように設定しています。

pyxファイルをコンパイルすると、結果の注釈付きファイルに濃い黄色で表示さcython -a foo.pyxれる行が表示されます (多くの Python 呼び出しがあり、速度が低下していることを意味します)。cdef int[:] x = np.empty(10)html

型付けされた Memoryview をより適切にインスタンス化するにはどうすればよいですか?

0 投票する
3 に答える
2894 参照

python - Cythonの新しいスタイルのバッファオブジェクトでCポインタと長さをラップする方法は?

Cython で Python 2.7 拡張モジュールを作成しています。 C ライブラリから提供されたメモリのチャンクをラップする新しいスタイルのバッファ インターフェイスを実装する Python オブジェクトを作成するにはどうすればよいですか? メモリのチャンクは単なるバイト文字列であり、構造体や多次元配列ではありません。ポインターと長さ、およびポインターの有効期間に関する詳細が与えられconst void *ます。

メモリをコピーできません。アプリケーションのパフォーマンスが低下します。

古いスタイルのバッファ オブジェクトでは単純に を使用できPyBuffer_FromMemory()ましたが、新しいスタイルのバッファ オブジェクトを生成する同様に簡単な方法が見つからないようです。

バッファ インターフェイスを実装する独自のクラスを作成する必要がありますか? または、Cython はこれを行う簡単な方法を提供していますか?

Cython のドキュメントからUnicode と Passing StringsTyped Memoryviewsのページを読みましたが、ドキュメントは不正確で完全ではなく、私がやりたいことに似た例はありません。

これが私が試したことです(test.pyx):

0 投票する
2 に答える
2769 参照

python - Cython 型付きメモリビューを使用して Python から文字列を受け入れる方法は?

型指定された memoryviewとしてバイト文字列オブジェクト (通常の文字列、bytearray、またはbuffer protocolに従う別のオブジェクト) を取る Cython 関数を作成するにはどうすればよいですか?

Unicode and Passing Strings Cython チュートリアル ページによると、次のように動作するはずです。

bytearray やその他の書き込み可能なバッファーでは機能します。

ただし、通常の文字列やその他の読み取り専用のバッファー オブジェクトでは機能しません。

生成された C コードを見ると、Cython は常にPyBUF_WRITABLEフラグをPyObject_GetBuffer()に渡しています。これが例外を説明しています。

自分で手動でバッファ オブジェクトのビューを取得できますが、それほど便利ではありません。

何か間違ったことをしていますか、それとも Cython は型指定された memoryview オブジェクトへの読み取り専用バッファ オブジェクト (通常の文字列など) の強制をサポートしていませんか?