我有两个 numpy 数组,每个数组有两列。
import numpy as np
a = np.array([[1131, 1],
[4131, 2],
[421, 1],
[41, 1]])
b = np.array([[5881, 2],
[637, 2],
[742, 2],
[36, 2]])
我想创建一个包含 2 列的第三个数组,第一列将包含 a 和 b 的第一列之间的最小值,第二列将包含包含最小值的数组的第二列。
第三个数组应该是
c = np.array([[1131, 1],
[637, 2],
[421, 1],
[36, 2]])
我怎样才能有效地做到这一点?
最佳答案
看起来是滥用 的完美案例 NumPy broadcasting
在 np.where
内-
np.where((a[:,0] < b[:,0])[:,None],a,b)
美妙之处在于它可以独立于 a
和 b
中的列数工作,因为这是广播的帮助。
sample 运行-
In [78]: a
Out[78]:
array([[1131, 99],
[4131, 4],
[ 421, 56],
[ 41, 78]])
In [79]: b
Out[79]:
array([[5881, 23],
[ 637, 42],
[ 742, 7882],
[ 36, 62]])
In [80]: np.where((a[:,0] < b[:,0])[:,None],a,b)
Out[80]:
array([[1131, 99],
[ 637, 42],
[ 421, 56],
[ 36, 62]])
关于python - 将两个 numpy.arrays 之间的比较仅应用于一列但检索整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36772082/