Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 关于在np.where语句中使用np.logical_和的问题_Python_Arrays_Numpy - Fatal编程技术网

Python 关于在np.where语句中使用np.logical_和的问题

Python 关于在np.where语句中使用np.logical_和的问题,python,arrays,numpy,Python,Arrays,Numpy,考虑4列数组Q的一个小示例。我的目标是消除Q行,其中列0和2相等,列1和3相等。所以,[1,2,1,2]需要走,就像[3,4,3,4]一样。我认为下面的代码可以工作 import numpy as np Q = np.array([[1, 2, 1, 2], [1, 2, 1, 4], [2, 4, 3, 4], [3, 4, 3, 4], [4, 7, 2, 5]]) outpu

考虑4列数组Q的一个小示例。我的目标是消除Q行,其中列0和2相等,列1和3相等。所以,
[1,2,1,2]
需要走,就像
[3,4,3,4]
一样。我认为下面的代码可以工作

import numpy as np

Q = np.array([[1, 2, 1, 2],
              [1, 2, 1, 4],
              [2, 4, 3, 4],
              [3, 4, 3, 4],
              [4, 7, 2, 5]])

output = Q[np.where(np.logical_and(Q[:,0] != Q[:, 2], Q[:,1] != Q[:, 3]))]
print(output)

[[4 7 2 5]]
此代码删除了所需的两行,但也删除了
[1,2,1,4]
[2,4,3,4]

换句话说,它正在做:
如果V[:,0]!=V[:,2]删除记录,如果V[:,1]!=V[:,3]也删除记录。”

我希望它: “如果V[:,0]!=V[:,2]和V[:,1]!=V[:,3]
这不就是逻辑和逻辑的意思吗


对我缺少的东西有什么见解吗?

您所描述的理想输出是:

output = Q[~((Q[:,0]==Q[:,2]) * (Q[:,1]==Q[:,3]))]
或者同等地:

output = Q[~(np.logical_and(Q[:,0]==Q[:,2], Q[:,1]==Q[:,3]))]
output = Q[np.logical_or(Q[:,0]!=Q[:,2], Q[:,1]!=Q[:,3])]
output = Q[(Q[:,0]!=Q[:,2]) + (Q[:,1]!=Q[:,3])]
或者同等地:

output = Q[~(np.logical_and(Q[:,0]==Q[:,2], Q[:,1]==Q[:,3]))]
output = Q[np.logical_or(Q[:,0]!=Q[:,2], Q[:,1]!=Q[:,3])]
output = Q[(Q[:,0]!=Q[:,2]) + (Q[:,1]!=Q[:,3])]
或者同等地:

output = Q[~(np.logical_and(Q[:,0]==Q[:,2], Q[:,1]==Q[:,3]))]
output = Q[np.logical_or(Q[:,0]!=Q[:,2], Q[:,1]!=Q[:,3])]
output = Q[(Q[:,0]!=Q[:,2]) + (Q[:,1]!=Q[:,3])]
但我更喜欢这种方式(可能更快):

请注意,您不需要
np.where
。布尔掩码应用于数组
Q
的行

输出:

[[1 2 1 4]
 [2 4 3 4]
 [4 7 2 5]]

@用户109387不客气。我个人更喜欢
output=Q[(Q[:,0:2]!=Q[:,2:)。任何(1)]
,但这也取决于这个简化问题如何应用于您的特定问题。在答案中也添加了这一点。