假设我有以下简单数组:
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
来创建两个新数组 A
和 B
,通过迭代 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 中。
答案 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]