python - 将两个 numpy.arrays 之间的比较仅应用于一列但检索整行

标签 python numpy

我有两个 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 broadcastingnp.where 内-

np.where((a[:,0] < b[:,0])[:,None],a,b)

美妙之处在于它可以独立于 ab 中的列数工作,因为这是广播的帮助。

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/

相关文章:

python - 文件夹和子文件夹的字典

python - Numpy:求幂运算的负执行时间

python - 将可变长度字符串数组转换为数据帧

python - Pandas 和 NumPy 默认宽度在启动时改变

python - 乔列斯基分解浮点误差

python - 使用 virtualenv 和特定 Python 版本有困难吗?

python - 使用 Python 进行参数扩展

python - 我可以维护一个元组列表(时间戳、ID),部分排序时间小于线性时间吗?

python - Django 多对多(通过),带有三个表和额外属性

python - 在 numpy 中用零替换除零错误