在numpy数组上映射函数的最有效方法是什么?我在当前项目中一直这样做的方式如下:
import numpy as np
x = np.array([1, 2, 3, 4, 5])
# Obtain array of square of each element in x
squarer = lambda t: t ** 2
squares = np.array([squarer(xi) for xi in x])
Run Code Online (Sandbox Code Playgroud)
但是,这看起来可能非常低效,因为我使用列表解析将新数组构造为Python列表,然后再将其转换回numpy数组.
我们可以做得更好吗?
给定NumPy数组A,将相同函数f应用于每个单元格的最快/最有效的方法是什么?
假设我们将分配给A(I,J)的F(A(I,J)) .
函数f没有二进制输出,因此掩码(ing)操作无济于事.
"明显的"双循环迭代(通过每个单元格)是最优解吗?
我发现,numpy.sin当参数大小小于等于8192且大于8192时,行为会有所不同。性能和返回的值都不同。有人可以解释这种影响吗?
例如,让我们计算sin(pi / 4):
x = np.pi*0.25
for n in range(8191, 8195):
xx = np.repeat(x, n)
%timeit np.sin(xx)
print(n, np.sin(xx)[0])
Run Code Online (Sandbox Code Playgroud)
64.7 µs ± 194 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
8191 0.7071067811865476
64.6 µs ± 166 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
8192 0.7071067811865476
20.1 µs ± 189 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
8193 0.7071067811865475
21.8 …Run Code Online (Sandbox Code Playgroud)