あなたの機能:
In [310]: def foo(a,b):
...: x = struct.pack('2B', a,b)
...: return struct.unpack('H',x)[0]
np.vectorize
は、放送アレイの便利な方法です。スカラー値を関数に渡します。
In [313]: np.arange(5)[:,None]+np.arange(10)*256
Out[313]:
array([[ 0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2304],
[ 1, 257, 513, 769, 1025, 1281, 1537, 1793, 2049, 2305],
[ 2, 258, 514, 770, 1026, 1282, 1538, 1794, 2050, 2306],
[ 3, 259, 515, 771, 1027, 1283, 1539, 1795, 2051, 2307],
[ 4, 260, 516, 772, 1028, 1284, 1540, 1796, 2052, 2308]])
:私は、同じアレイ上の単純な数学式を用いてこれらの値を複製することができ
In [311]: fv = np.vectorize(foo)
In [312]: fv(np.arange(5)[:,None],np.arange(10))
Out[312]:
array([[ 0, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 2304],
[ 1, 257, 513, 769, 1025, 1281, 1537, 1793, 2049, 2305],
[ 2, 258, 514, 770, 1026, 1282, 1538, 1794, 2050, 2306],
[ 3, 259, 515, 771, 1027, 1283, 1539, 1795, 2051, 2307],
[ 4, 260, 516, 772, 1028, 1284, 1540, 1796, 2052, 2308]])
(普通の反復に対して2倍の速度を与えることができるfrompyfunc
に関連する)コードをスピードアップしませんこれはおそらく限定された範囲の値に対してのみ機能しますが、numpy
で計算を適切に 'ベクトル化'する方法が考えられます。
'f()'によって決まります。スレッドやマルチプロセッシングを試してみることができます。 – Harvey
'f'が何をしているのか、あなたのデータがどれだけ大きいのか、実際には何かを実行するのが実際に何かを知ることなく誰かが答えを期待しているか分かりません。 – excaza
[放送](http://scipy.github.io/old-wiki/pages/EricsBroadcastingDoc)を利用するために 'f'を変更できますか? –