kab*_*mmi 7 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))
Run Code Online (Sandbox Code Playgroud)
我无法弄清楚如何生成一个array3,它结合了array1和array2的元素来生成一个数组,其中只取两个array1/array2元素值中较大的一个.
任何帮助将非常感激.谢谢.
Div*_*kar 18
我们可以使用NumPy内置np.maximum,完全是为了这个目的 -
np.maximum(array1, array2)
Run Code Online (Sandbox Code Playgroud)
另一种方法是np.max在2D堆叠阵列上max-reduce沿第一轴使用NumPy ufunc (axis=0)-
np.max([array1,array2],axis=0)
Run Code Online (Sandbox Code Playgroud)
关于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
Run Code Online (Sandbox Code Playgroud)
扩展到其他支持ufunc
类似地,np.minimum用于在具有相同或可广播形状的两个阵列之间找到元素最小值.因此,要找到array1和之间的元素最小值array2,我们将:
np.minimum(array1, array2)
Run Code Online (Sandbox Code Playgroud)
有关ufuncs该支持的完整列表,请参阅docs并查找关键字:element-wise.Grep对于那些人,我得到了以下ufuncs:
加,减,乘,除,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
Eri*_*nil 13
如果您的情况变得更复杂,您可以使用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])
Run Code Online (Sandbox Code Playgroud)
您可以替换array1 > array2任何条件.如果您想要的只是最大值,请使用@Divakar的答案.
而且只是为了好玩:
magic = lambda x,y : np.where(x > y , x, y)
magic(array1, array2)
# array([2, 5, 0])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1757 次 |
| 最近记录: |