如何有条件地合并两个相同形状的Numpy数组

发布于 2021-01-29 19:33:54

这听起来很简单,我想我的想法太复杂了。

我想制作一个数组,其元素是从两个形状相同的源数组生成的,具体取决于源数组中哪个元素更大。

为了显示:

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元素值中的较大者。

任何帮助将非常感激。谢谢。

关注者
0
被浏览
74
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我们可以使用NumPy内置的np.maximum,正是为此而制作的-

    np.maximum(array1, array2)
    

    另一种方式是使用NumPy的ufuncnp.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)
    

    有关ufuncs支持此功能的完整列表,请参考
    docs

    并寻找关键字:element-wiseGrep对于这些,我得到了以下ufuncs:

    加,减,乘,除,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



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看