这听起来很简单,我想我的想法太复杂了。
我想制作一个数组,其元素是从两个形状相同的源数组生成的,具体取决于源数组中哪个元素更大。
为了显示:
import numpy as np array1 = np.array((2,3,0)) array2 = np.array((1,5,0)) array3 = (insert magic) >> array([2, 5, 0))
我不知道如何产生一个将array1和array2的元素组合在一起的array3,以产生一个数组,其中仅取两个array1 / array2元素值中的较大者。
任何帮助将非常感激。谢谢。
我们可以使用NumPy内置的np.maximum,正是为此而制作的-
np.maximum
np.maximum(array1, array2)
另一种方式是使用NumPy的ufuncnp.max上的2D堆叠阵列和max- reduce沿着第一轴线(axis=0)-
np.max
2D
max- reduce
(axis=0)
np.max([array1,array2],axis=0)
100万个数据集上的时间-
In [271]: array1 = np.random.randint(0,9,(1000000)) In [272]: array2 = np.random.randint(0,9,(1000000)) In [274]: %timeit np.maximum(array1, array2) 1000 loops, best of 3: 1.25 ms per loop In [275]: %timeit np.max([array1, array2],axis=0) 100 loops, best of 3: 3.31 ms per loop # @Eric Duminil's soln1 In [276]: %timeit np.where( array1 > array2, array1, array2) 100 loops, best of 3: 5.15 ms per loop # @Eric Duminil's soln2 In [277]: magic = lambda x,y : np.where(x > y , x, y) In [278]: %timeit magic(array1, array2) 100 loops, best of 3: 5.13 ms per loop
扩展到其他支持的功能
同样,可以np.minimum在两个相同或可广播形状的数组之间找到按元素的最小值。因此,要找到array1和之间的逐元素最小值array2,我们将有:
np.minimum
array1
array2
np.minimum(array1, array2)
有关ufuncs支持此功能的完整列表,请参考 docs 并寻找关键字:element-wise。Grep对于这些,我得到了以下ufuncs:
ufuncs
docs
element-wise
Grep
加,减,乘,除,logaddexp,logaddexp2,true_divide,floor_divide,幂,余数,mod,fmod,divmod,heaviside,gcd,lcm,arctan2,hypot,bitwise_and,bitwise_or,bitwise_xor,left_shift,right_shift,更大,更大等于较少,less_equal,not_equal,equal,逻辑与,逻辑或,逻辑异或,最大值,最小值,fmax,fmin,copysign,nextafter,ldexp,fmod