如果一个元素小于或大于某个特定值,如何删除2D numpy数组中的列

时间:2018-11-06 08:10:43

标签: python arrays numpy

现在我有一个二维numpy数组,它们代表图像的坐标像素

std::dequeu

每列代表图像中的坐标,例如: array [0] = [-1,-3]表示x = -1和y = -3

现在,我要删除x小于0 &&大于5或y小于0 &&大于5的列

我知道如何删除某个值的元素

swap

是否有办法删除与删除的x共享相同索引的y?(换句话说,当满足x删除或y删除的条件时删除列)

2 个答案:

答案 0 :(得分:2)

您可以将list转换为ndarray,然后创建布尔值掩码并重新分配xy。嵌套的logical_and意味着您创建x>=0 and x<=5y>=0 and y<=5的掩码,然后AND运算符确保一旦删除x[i]y[i]也删除了

points = [[-1,-2,0,1,2,3,5,8], [-3,-4,0,-3,5,9,2,1]]
x = np.array(points[0,:])
y = np.array(points[1,:])

mask = np.logical_and(np.logical_and(x>=0, x<=5), np.logical_and(y>=0, y<=5))
# mask = array([False, False,  True, False,  True, False,  True, False])

x = x[mask] # x = array([0, 2, 5])
y = y[mask] # y = array([0, 5, 2])

答案 1 :(得分:0)

您可以沿轴= 1使用np.compress来获取所需的点:

req

我假设np.compress((x>=0) * (x<=5) * (y>=0) * (y<=5), points, axis=1) array([[0, 2, 5], [0, 5, 2]]) xy是numpy数组。