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

标签 python arrays numpy

这听起来很简单,但我觉得我把它想得太复杂了。

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

举例说明:

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)

另一种方法是使用 NumPy ufunc np.max2D 堆叠数组和 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

扩展到其他支持的 ufunc

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

np.minimum(array1, array2)

有关支持此功能的 ufunc 的完整列表,请参阅 docs并查找关键字:element-wiseGrep-ing 对于那些,我得到了以下 ufuncs:

add, subtract, multiply, divide, logaddexp, logaddexp2, true_divide, floor_divide, power, remainder, mod, fmod, divmod, heaviside, gcd, lcm, arctan2, hypot, bitwise_and, bitwise_or, bitwise_xor, left_shift, right_shift, greater, greater_equal, less, less_equal, not_equal, equal, logical_and, logical_or, logical_xor, maximum, minimum, fmax, fmin, copysign, nextafter, ldexp, fmod

关于python - 如何有条件地组合两个相同形状的numpy数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46558114/

相关文章:

javascript - 使用 *ngfor 的多个选择标签更改第一个选择标签值会影响其他选择标签

python - 将一列列表拆分为不同的列时出错

python - Numpy 中浮点值的组件明智比较返回错误结果

python - 基于条件的值之间的差异

c - 释放二维数组 - 检测到堆损坏

java - 消除数组中重复对象的最佳方法

Python Numpy : Replace duplicate values with mean value

python - 如何将所有 conda 环境放入一个文件夹

python - pymongo geo2d 聚合结果以什么单位返回

python - 使用一个 C 程序运行 python 脚本(不同的 python 版本)