在一个Numpy数组的列中查找所有值的第一个实例

问题描述 投票:0回答:1

我正在尝试查找数组中任何行的首次出现,其中任一列的编号均自上次出现以来已发生更改。给定下面的数组:

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 arrayusing multiple conditionstrying to get the first element in a 2-D arrayaccessing 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

python-3.x numpy multidimensional-array
1个回答
1
投票

使用axisnumpy.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
© www.soinside.com 2019 - 2024. All rights reserved.