2017-04-19 61 views
0

我有n个元素的以下两个numpy的数组:如何从两个不同数组上的按元素计算返回数组?

A = np.array([2 5 8 9 8 7 5 6]) 
B = np.array([8 9 6 5 2 8 5 7]) 

我想获得阵列C:

C = np.array([sqrt(2^2+8^2) sqrt(5^2+9^2) ... sqrt(6^2+7^2)]) 

即,列C将包括n个元素的;每个元素将等于A中相应元素的平方的平方根加上B中相应元素的平方。

我试过使用np.apply_along_axis,但它似乎只是为一个数组设计的。

+3

为什么不使用vectorized ufuncs:'np.sqrt(A ** 2 + B ** 2)'? – Divakar

回答

2

正如评论指出,可以使用:

C = np.sqrt(A**2 + B**2) 

或者你可以使用comprehensionzip

C = [sqrt(a**2 + b**2) for a, b in zip(A,B)] 
1

如果你的阵列体积庞大,请考虑使用np.square代替**操作。

In [16]: np.sqrt(np.square(A) + np.square(B)) 
Out[16]: 
array([ 8.24621125, 10.29563014, 10.  , 10.29563014, 
     8.24621125, 10.63014581, 7.07106781, 9.21954446]) 

在执行时间的差异是很小的,但。

In [13]: ar = np.arange(100000) 

In [14]: %timeit np.square(ar) 
10000 loops, best of 3: 158 µs per loop 

In [15]: %timeit ar**2 
10000 loops, best of 3: 179 µs per loop