在numpy数组中找到有序向量

JAW*_*AWE 5 python arrays numpy vector

我需要在numpy.array中找到一个向量.例如,我有一个名为e的np.array,我想找到e中的向量[1,2](意思是我想在矩阵中有向量的索引)但显然我的程序看到了向量甚至何时不存在:

在此输入图像描述

我用来构建e的代码如下:

import numpy as np
faces = np.array([[1,2,3,4],[5,6,2,1],[6,7,3,2],[7,8,4,3],[8,5,1,4],[8,7,6,5]])
e = np.zeros([6,4,2])
for k in range(len(faces)):
    a = [faces[k][0], faces[k][1]]
    b = [faces[k][1], faces[k][2]] 
    c = [faces[k][2], faces[k][3]]
    d = [faces[k][3], faces[k][0]]
    e[k] = np.array([a,b,c,d])
 print('e: %s' %e)
Run Code Online (Sandbox Code Playgroud)

任何线索如何解决这个问题?

Dan*_*lan 5

不要将 Pythonin与 numpy 数组一起使用。

中有 6 x 4 对e

In [32]: e.shape
Out[32]: (6, 4, 2)
Run Code Online (Sandbox Code Playgroud)

您正在查找与all()pair中的两个(即)条目匹配的元素[1, 2]

In [33]: (e == np.array([1, 2])).all(-1)
Out[33]: 
array([[ True, False, False, False],
       [False, False, False, False],
       [False, False, False, False],
       [False, False, False, False],
       [False, False, False, False],
       [False, False, False, False]], dtype=bool)
Run Code Online (Sandbox Code Playgroud)

-1all(-1)所引用的数组中的最后一维,构成对所述形状的一部分。使用 -1 可能比使用 2 更通用,这也适用于这种情况。

它找到了正确的匹配——唯一的True价值。你可以看到这个结果的形状是有道理的。

In [34]: (e == np.array([1, 2])).all(-1).shape
Out[34]: (6, 4)
Run Code Online (Sandbox Code Playgroud)

要获取您可以执行的第一场比赛索引

x, y = (e == np.array([1, 2])).all(-1).argmax(1).argmax(), (e == np.array([1, 2])).all(-1).argmax(0).argmax()
Run Code Online (Sandbox Code Playgroud)

但是使用np.argwhereCT Zhu 的回答中建议的方法肯定更好。


CT *_*Zhu 4

尝试:

e[np.all((e-np.array([1,2]))==0, axis=2)]
Run Code Online (Sandbox Code Playgroud)

简要说明。e-np.array([1,2])返回它在 array 中的[0,0]位置。返回布尔数组:否则(因此诸如此类的事情将变为 False)。最后,将其从 e 中切片。[1,2]enp.all(..., axis=2True[0,0] False[1,1]

获取 的索引[1,2](可能有多个子向量[1,2]):

np.argwhere(np.all((e-array([1,2]))==0, axis=2))
Run Code Online (Sandbox Code Playgroud)