Numpy设定了绝对值

Ton*_*ony 6 python arrays numpy

您有一个数组A,并且您希望将其中的每个值作为绝对值.问题是

numpy.abs(A)
Run Code Online (Sandbox Code Playgroud)

创建一个新矩阵,A中的值保持原样.我找到两种方法来将绝对值设置回A

A *= numpy.sign(A)
Run Code Online (Sandbox Code Playgroud)

要么

A[:] = numpy.abs(A)
Run Code Online (Sandbox Code Playgroud)

根据时间测试,他们的表现几乎相同 在此输入图像描述

题:

有更有效的方法来执行此任务吗?

cs9*_*s95 7

有一个out参数,可以就地更新数组:

numpy.abs(A, out=A)
Run Code Online (Sandbox Code Playgroud)

并且也恰好是一个很大更快,因为你不必为新阵列分配内存.

A = np.random.randn(1000, 1000)

%timeit np.abs(A)
100 loops, best of 3: 2.9 ms per loop

%timeit np.abs(A, out=A)
1000 loops, best of 3: 647 µs per loop
Run Code Online (Sandbox Code Playgroud)