相关疑难解决方法(0)

在numpy数组上映射函数的最有效方法

在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数组.

我们可以做得更好吗?

python performance numpy

264
推荐指数
9
解决办法
32万
查看次数

在NumPy阵列的每个单元处有效地评估函数

给定NumPy数组A,将相同函数f应用于每个单元格的最快/最有效的方法是什么?

  1. 假设我们将分配给A(I,J)F(A(I,J)) .

  2. 函数f没有二进制输出,因此掩码(ing)操作无济于事.

"明显的"双循环迭代(通过每个单元格)是最优解吗?

python performance numpy function vectorization

123
推荐指数
2
解决办法
11万
查看次数

如果参数大小大于8192,为什么numpy.sin返回不同的结果?

我发现,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)

python numpy intel-mkl anaconda

14
推荐指数
1
解决办法
412
查看次数