2017-04-19 60 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