将多维数组的元素与两个新数组进行比较和存储

时间:2021-07-18 17:42:14

标签: python arrays numpy

假设我有以下简单数组:

my_array = np.array([[1,2],[2,4],[3,6],[2,1]])

对应另一个父数组:

parent_array = np.array([0,1,2,3])

当然,有一个函数可以将 parent_array 映射到 np.array,但它是什么函数并不重要。

目标: 我想使用这个 my_array 来创建两个新数组 AB,通过迭代 my_array 的每一行:for row i 如果第一个my_array[i] 的列大于我将在 parent_array[i] 中存储 A 的第二列的值。否则我会将 parent_array[i] 存储在 B 中(如果 my_array[i] 中的第二列的值更大)。

因此对于上述情况,结果将是:

A = [3]

因为仅在 my_array 的第 4 个值中第一列具有更大的值并且

  B = [0,1,2]

因为在前三行中,第二列的值更大。

现在,虽然我知道如何将一行列中较大的元素保存到一个新数组中,但事实上 my_array 中的每一行都与一行相关联在 parent_array 让我很困惑。我不知道如何将它们关联起来。


总结: 因此,我需要将 parent_array 的每一行与 my_array 的每一行相关联,然后如果逐行检查后者,如果第一列的值在 my_array[i] 中更大,我保存 { {1}} 在 A while 如果第二列在 parent_row[i] 中更大,我将 my_array[i] 保存在 B 中。

1 个答案:

答案 0 :(得分:0)

为此使用 boolean array indexing:通过比较 my_array 的第一列和第二列的值来创建布尔条件数组,然后使用它从 parent_array 中选择值:

cond = my_array[:,0] > my_array[:,1]
A, B = parent_array[cond], parent_array[~cond]
A
# [3]
B
# [0 1 2]