繁体   English   中英

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

[英]How to conditionally combine two numpy arrays of the same shape

这听起来很简单,我想我把它复杂化了。

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

为了显示:

import numpy as np
array1 = np.array((2,3,0))
array2 = np.array((1,5,0))

array3 = (insert magic)
>> array([2, 5, 0))

我不知道如何生成一个 array3,它结合了 array1 和 array2 的元素来生成一个数组,其中只采用两个 array1/array2 元素值中的较大值。

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

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

np.maximum(array1, array2)

另一种方法是在2D堆叠数组上使用 NumPy np.max并沿第一个轴(axis=0) max-reduce -

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

扩展到其他支持的 ufuncs

同样,有np.minimum用于在两个相同或可广播形状的数组之间查找元素方面的最小值。 因此,要在array1array2之间找到元素方面的最小值,我们将有:

np.minimum(array1, array2)

有关支持此功能的ufuncs的完整列表,请参阅docs并查找关键字 : element-wise Grep -ing那些,我得到了以下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、greater、greater_equal、少、less_equal、not_equal、相等、logical_and、logical_or、logical_xor、最大值、最小值、fmax、fmin、copysign、nextafter、ldexp、fmod

如果您的情况变得更加复杂,您可以使用np.where

import numpy as np
array1 = np.array((2,3,0))
array2 = np.array((1,5,0))
array3 = np.where( array1 > array2, array1, array2)
# array([2, 5, 0])

您可以用任何条件替换array1 > array2 如果您想要的只是最大值,请使用@Divakar 的答案

只是为了好玩:

magic = lambda x,y : np.where(x > y , x, y)
magic(array1, array2)
# array([2, 5, 0])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM