当前位置: 首页 > 面试题库 >

A cranky quirk:将函数应用于所有两个1D数组对,以获得一个2D数组

段干博明
2023-03-14
问题内容

假设我有2个一维(1D)numpy数组ab,其长度分别为n1n2。我还有一个函数F(x,y),它有两个值。现在,我想将该函数应用于两个1D数组中的每对值,因此结果将是一个带有shape的2D
numpy数组n1, n2i, j二维数组的元素F(a[i], b[j])

没有大量的for循环,我一直找不到找到这种方法的方法,而且我敢肯定,在numpy中,有一种更简单(更快)的方法。

提前致谢!


问题答案:

您可以使用numpy广播在两个数组上进行计算,使用以下命令将其a转换为垂直2D数组newaxis

In [11]: a = np.array([1, 2, 3]) # n1 = 3
    ...: b = np.array([4, 5]) # n2 = 2
    ...: #if function is c(i, j) = a(i) + b(j)*2:
    ...: c = a[:, None] + b*2

In [12]: c
Out[12]: 
array([[ 9, 11],
       [10, 12],
       [11, 13]])

进行基准测试:

In [28]: a = arange(100)

In [29]: b = arange(222)

In [30]: timeit r = np.array([[f(i, j) for j in b] for i in a])
10 loops, best of 3: 29.9 ms per loop

In [31]: timeit c = a[:, None] + b*2
10000 loops, best of 3: 71.6 us per loop


 类似资料: