함수 :
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'를 수정할 수 있습니까? –