我有一个具有许多行和3列的numpy整数数组。显示了一个示例。第二和第三列表示索引,每个第二列的值<对应的第三列的值。
我也有一个变量k。在此示例中,我将使用k = 4。
任务:我想查找所有数组行,其中k严格不在第二列和第三列中的值之间。因此,在每个“幸存”行中,第二列和第三列的值都将小于k,或者都大于k。
import numpy as np
arr = np.array([[-1, 0, 6],
[-6, 1, 2],
[-8, 3, 10],
[ 3, 4, 11],
[-2, 5, 9],
[-4, 7, 8]])
m = arr[((arr[:,1] > k) & (arr[:,2] > k)) | ((arr[:,1] < k) & (arr[:,2] < k))]
m的代码(上面)工作正常,可以正确生成以下数组:
[[-6, 1, 2],
[-2, 5, 9],
[-4, 7, 8]]
这是我的问题-是否可以简化或更好地制定m?我尝试切片(即:在m的表达式中使用arr [:,1:]或arr [:,[1,2]])没有成功。另外,我对于“ |”是否有点粗略 是执行逻辑“或”的正确方法。
谢谢
您可以使用向量代数运算。我不确定它是否会简化,但是它很时髦。
arr[np.prod(arr[...,1:3] < k, axis=1) + np.prod(arr[...,1:3] > k, axis=1) > 0,:]
背后的逻辑是检查两列是否均小于(或大于)k
并乘以对应于an的结果,and
然后将结果向量相加并检查它们是否大于1(应对应于)or
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句