3

私は、商用の画像処理ライブラリの Python バインディング用の高速な非コピー インターフェイスを作成しようとしています。memoryview() によると問題ないように見える新しいスタイルのバッファ API プロトコルを実装しました。

import hirsch as H
import numpy as np

w,h = 7,5
img = H.HImage.GenImageConst('byte',w,h)
m = memoryview(img)
print 'ndim shape=',m.ndim,m.shape
# -> 2 (5L, 7L)

私が理解できないのは、numpy がこのインターフェイスをキャッチしない理由です。

a = np.array(img)
print 'ndim size shape=',a.ndim,a.size,a.shape
# -> 0 1 ()

私は何か間違ったことをしていますか、それともデータをコピーしますが、機能する numpy 配列インターフェイスを使用する必要がありますか?

私はpython 2.7を使用していることに注意してください

4

2 に答える 2

3

この関数は、バッファではなく、配列のようなオブジェクトをnp.array想定しています。

array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)

配列を作成します。

object : array_like
配列、配列インターフェイスを公開する任意のオブジェクト、__array__メソッドが配列を返すオブジェクト、または任意の (ネストされた) シーケンス。

バッファから配列を作成する場合は、次を使用する必要がありますnp.frombuffer

frombuffer(buffer, dtype=float, count=-1, offset=0)

バッファを 1 次元配列として解釈します。

buffer : buffer_like
バッファ インターフェイスを公開するオブジェクト。

現在、numpy に関する限り、オブジェクトはスカラーです。

In [7]: a=np.array(1)

In [8]: a.ndim,a.size,a.shape
Out[8]: (0, 1, ())
于 2014-08-17T07:34:32.127 に答える
0

を試すこともできますnp.asarray。私は成功しましたが、ヒルシュにアクセスできないため、テストできません。

ところで、Bakuriu は正しいです: type のスカラー配列 (ndim 0、サイズ 1) を作成していますnp.object

于 2014-08-17T08:20:53.427 に答える