如果X和Y在NumPy数组中匹配元素

3

如何检查数组中是否存在一个元素,其坐标 [X, Y][drawx, drawy] 相匹配?

我有一个 NumPy 数组

#format: [X, Y]
wallxy = numpy.array([[0,1],[3,2],[4,6]])

以及另外两个变量:

#attached to a counter that increases value each loop
drawx = 3
drawy = 2

我正在使用数组作为位置的集合[[0,1],[3,2],[4,6]],我需要测试[drawx,drawy](也表示一个位置)是否在X和Y轴等上的某个位置。 drawx = 4 drawy = 6 返回truedrawx = 3 drawy = 2 返回truedrawx = 4 drawy = 2 返回falsedrawx = 2 drawy = 1 返回false

"[drawx, drawy] in wallxy" 实际上是在执行 "(wallxy == [drawx, drawy]).any()"。这真的很奇怪,而且完全没有用处。 - user2357112
你想要的结果是什么?它实际上做了什么?在我的测试中,它似乎完全正常;[3, 2] in wallxyTrue,而 [2, 3] in wallxyFalse。你想要它返回每个索引的布尔类型列表吗? - Jeff
1
这只是一个粗略的建议,可以循环遍历wallxy中的每一行,然后使用numpy.array_equal([drawx,drawy],[row])来确定数组中是否存在您的对。您想要检查_对_或_行_的相等性,即对/行的两个元素和形状都匹配,例如 [0,1] == [0,1] = True(形状和元素都匹配),[0,1] == [1,0] = False 和 [0,1] == [0,1,2] = False。 - Jonathon Ogden
或许这就是你想要的。首先使用 wallxy.flatten():https://dev59.com/nl7Va4cB1Zd3GeqPLZ6S - Jeff
2个回答

2

==会自动进行广播比较,因此

wallxy = numpy.array([[0, 1],[3, 2][4, 6]])
z0 = numpy.array([3,2])
z1 = numpy.array([2,3])

(z0==wallxy).all(1).any()  # True
(z1==wallxy).all(1).any()  # False

我想你需要的是这个。

打印出中间步骤对于理解和解决类似任务将非常有用:

z0 == wallxy     # checks which elements match
#  array([[False, False],
#         [ True,  True],
#         [False, False]], dtype=bool)

(z0==wallxy).all(1)   # checks whether all elements of axis 1 match
#  array([False,  True, False], dtype=bool)

(z0==wallxy).all(1).any()   # checks whether any axis 1 matches z0
#  True

如果您使用了z0 = numpy.array([2,3]),那么一切都会是False

我实际上想检查数组中是否存在一个元素,其中两个轴匹配 drawxdrawy...(我很抱歉我的原始问题没有表达得很清楚)谢谢。 - GCaldL
@Pineapples:我想我不太明白。更具体地说,您在意顺序吗?只需要匹配一个还是两个都需要?您是否关心它是行还是列?您只是希望其中之一在数组中的任何位置匹配吗?最有帮助的是给出您想要匹配和不想要匹配的示例。 - tom10
我正在使用数组作为位置集[[0,1],[3,2],[4,6]],我需要测试drawx和drawy(也表示一个位置)是否在X和Y轴上的一个位置中。 drawx = 4 drawy = 6 返回true drawx = 3 drawy = 2 返回true drawx = 4 drawy = 2 返回false drawx = 2 drawy = 1 返回false - GCaldL
@Pineapples:是的,如果我理解你的意思正确的话,那就是我的答案所做的。我稍微重新组织了一下,以使其更加突出。 - tom10
1
感谢您澄清答案。您的方法非常有效:z0 = numpy.array([drawx, drawy]) if (z0==wallxy).all(1).any(): 我只是漏掉了行末的.any()。再次感谢,我非常感激。 - GCaldL

-1

NumPy没有,但列表有

[3,2] in wallxy.tolist()
True

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接