我正在尝试查找数组中任何行的首次出现,其中任一列的编号均自上次出现以来已发生更改。给定下面的数组:
import numpy as np
arr = np.array([[1, 11], [2, 21], [3, 31], [4, 41], [1, 11], [2, 21], [3, 31], [4, 42]])
我正在寻找的输出看起来像:
subArr = [[1, 11]
[2, 21]
[3, 31]
[4, 41]
[4, 42]]
在实际问题中,数字不像在这里显示的那样顺序,并且无法预先预测。我已经尝试过finding the first instance in an array,using multiple conditions,trying to get the first element in a 2-D array和accessing the ith column。尽管其中一些是有帮助的,但我无法完成我想要的所有事情。我尝试过:
subArr = arr[np.unique(np.logical_and(arr[:,0][0], arr[:,1][0]))]
无效。我也尝试过:
subArr = arr[(arr[:,0][0]) & (arr[:,1][0])]
我确定这只是正确使用语法的问题,但我无法弄清缺少的内容。任何帮助将不胜感激。
使用:
Python 3.6
Numpy 1.18.1
使用axis
的numpy.unique
参数:
numpy.unique
返回的值是原始数组中行的副本,因此询问输出中的行是否对应于输入中首次出现的相同值并没有什么意义。
如果需要知道输入中每个唯一行的第一个出现的索引,则可以添加参数In [16]: arr
Out[16]:
array([[ 1, 11],
[ 2, 21],
[ 3, 31],
[ 4, 41],
[ 1, 11],
[ 2, 21],
[ 3, 31],
[ 4, 42]])
In [17]: np.unique(arr, axis=0)
Out[17]:
array([[ 1, 11],
[ 2, 21],
[ 3, 31],
[ 4, 41],
[ 4, 42]])
。执行此操作时,return_index
确保索引将是对应唯一值的首次出现的索引:
unique