当前位置: 首页 > 面试题库 >

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

胡元忠
2023-03-14
问题内容

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

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

为了显示:

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(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



 类似资料:
  • 问题内容: 使用出色的numpy广播规则,您可以从形状(5,3)数组减去一个形状(3,)数组,其中 结果是一个形状(5,3)数组,其中每一行都是差异。 有没有一种方法可以从中减去一个形状(n,3)数组,以便在不显式使用循环的情况下从整个数组中减去每一行? 问题答案: 您需要扩展with的尺寸以形成3D数组,然后通过进行减法。这将对该操作起作用,并导致输出形状为。实现看起来像这样- 相反,如果所需的

  • 问题内容: 如何合并两个保持BST属性的二叉搜索树? 如果我们决定从一棵树中取出每个元素并将其插入到另一个元素中,则此方法的复杂度将为,其中是我们已拆分的树的节点数(例如),是的结点数。另一棵树(例如)。此操作后,只有一个具有节点。 我的问题是:我们能做得比好吗? 问题答案: 纳夫的答案还有更多细节: 将BST展平为排序列表为O(N) 它只是整个树上的“有序”迭代。 两者都做O(n1 + n2)

  • 问题内容: 我如何结合这两个更新语句: 问题答案: 您可以使用CASE表达式,如下所示:

  • 问题内容: 我可以在其他具有相同列名的数据框的右边追加一个数据框吗 问题答案: 您可以像这样连接两个数据框。 如果您正在寻找联盟,则可以执行以下操作。 Spark 2.0,已重命名为

  • 问题内容: 我有以下数据集。 https://drive.google.com/drive/folders/1NRelNsXQJ7MTNKcm-T69N6r5ZsOyFmTS?usp=sharing 如果列名称与工作表名称相同,则将所有内容合并在一起作为单独的列,以下是代码 运行以上代码后的数据 merged_data 如何合并条件文件? 健康)状况。 以上代码段中的价格1指向带有名称为int 7

  • 我有一张3D医学图像。我使用获取连接的体素组。它非常快。但我还想得到每个标签的体素数量。我使用以下代码获取每个值的编号(假设是之后的数组)。大约2分钟。 有没有什么高效的方式来高效的获取呢?