【发布时间】:2015-09-27 04:35:44
【问题描述】:
我想获取B 的行,其中:
- 如果
A[:,0]等于B[:,0]或B[:,2],则A[:,1]必须分别等于B[:,1]或B[:,3] -
A[:,0]不等于B[i,0]和B[i,2]
例如:
A=np.array([[101, 1],
[103, 3]])
B=np.array([[100,1,101,1],
[100,1,102,1],
[100,1,103,3],
[100,2,101,2],
[100,2,103,2],
[101,1,100,3],
[101,1,103,2],
[101,4,100,4],
[101,4,103,4],
[104,5,102,3]])
R=np.array([[100,1,101,1],
[100,1,102,1],
[100,1,103,3],
[101,1,100,3],
[104,5,102,3]])
我从这里 (Implementation of numpy in1d for 2D arrays?) 尝试了解决方案,但我收到错误消息,因为我无法将 view 与数组切片一起使用。
感谢您的帮助!
【问题讨论】:
-
那么,
case 1和case 2是否都必须为 TRUE 才能从B中选择行。此外,在case 1中,"then"是否意味着"A[:,0] is equal to either B[:,0] or B[:,2]"和"[:,1] has to be equal to B[:,1] or B[:,3]"必须再次为真才能从 B 中选择行? -
@Divakar,case
1是一个条件语句,而 case2只是一个语句。无论2为真,1均无效(1中的if为假,因此支持条件)。单独的前半部分1不是选择过滤器(A[:,0]是否匹配B[:, even]中的一个无关紧要,只有匹配时才重要,然后A[:, 1]匹配相应的B[:, odd])。因此,逻辑上大小写2可以忽略,并且您得到相同的行。也许@user3357979 可以确认? -
@askewchan 是正确的
-
@user3357979,收到您的评论并注意到我的代码中有错误;它适用于您的示例,但有一个极端情况,它错过了两对
A中的匹配项可能被交叉的地方。请参阅我更新的答案。如果[103,1,101,3]在B中,它应该从输出中排除([101,3]对违反了暗示),但我的代码接受了它,因为它在检查暗示之前结合了A对(这取决于 其中A对匹配)。
标签: python arrays numpy intersection