arrayfire pow documentationによれば、af.pow()
は現在、実際の配列の累乗(およびルーツ...)のみをサポートしています。エラーはスローされませんが、複雑な入力を伴うaf.pow()
を使用すると、特に他の関数が入力として使用されている場合(たとえば、af.pow(af.ifft(array), 2)
)、メモリリークが大きくなることがあります。Arrayfireを使用したPythonでの複雑な配列の指数化の高速化
これを回避するために、私は以下の関数complexPow
を書いています。これはメモリリークのない複雑な配列に対して実行されたようですが、わかりやすく比較すると、complexPow
関数はnumpy.sqrt()
と**
演算子と同じ値を返します。
def complexPow(inData, power):
for i in af.ParallelRange(inData.shape[0]):
theta = af.atan(af.imag(inData[i])/af.real(inData[i]))
rSquared = af.pow(af.real(inData[i]), 2.0) + \
af.pow(af.imag(inData[i]), 2.0)
r = af.pow(rSquared, .5)
inData[i] = af.pow(r, power) * (af.cos(theta*power) + \
1j*af.sin(theta*power))
return inData
これよりもパラレルに要素指数をべき乗する方法はありますか?私は1つを見つけたが、私はここにトリックを...欠けている怖がっていない
これは少し速く並列for
ループなしで
これは間違いなくバグのようです。これを[github](https://github.com/arrayfire/arrayfire-python/issues)で報告できますか? – aatish
私はそうだと思いました。明日はやるだろう。私はメモリリークを示す最小の実例を持っています。 –