python - 在 NumPy 数组中获取唯一行时保持顺序
问题描述
我有三个二维数组a1
, a2
, 和a3
In [165]: a1
Out[165]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
In [166]: a2
Out[166]:
array([[ 9, 10, 11],
[15, 16, 17],
[18, 19, 20]])
In [167]: a3
Out[167]:
array([[6, 7, 8],
[4, 5, 5]])
我将这些数组堆叠成一个数组:
In [168]: stacked = np.vstack((a1, a2, a3))
In [170]: stacked
Out[170]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11],
[ 9, 10, 11],
[15, 16, 17],
[18, 19, 20],
[ 6, 7, 8],
[ 4, 5, 5]])
现在,我想摆脱重复的行。所以,numpy.unique
做这项工作。
In [169]: np.unique(stacked, axis=0)
Out[169]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 4, 5, 5],
[ 6, 7, 8],
[ 9, 10, 11],
[15, 16, 17],
[18, 19, 20]])
但是,这里有一个问题。获取唯一行时会丢失原始顺序。我怎样才能保留原始排序并仍然采用唯一的行?
所以,预期的输出应该是:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11],
[15, 16, 17],
[18, 19, 20],
[ 4, 5, 5]])
解决方案
使用return_index
_,idx=np.unique(stacked, axis=0,return_index=True)
stacked[np.sort(idx)]
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11],
[15, 16, 17],
[18, 19, 20],
[ 4, 5, 5]])
推荐阅读
- python - 如何从包含 csv 文件 url 的 json 文件中下载 csv 文件?
- pandas - ['date'] 均不在列中
- bash - 在容器中运行 Jenkins 在主机上构建 docker 文件
- vue.js - 根据 vuejs 上的映射计算属性创建计算属性
- java - Java流删除列表属性对象的重复列表
- python - 通过过滤列表进行循环
- python - 使用库 python_anticaptcha 在 Twitter 上解决 CAPTCHA 练习
- r - 如何使用 Flexdashboard 和 Shiny 将 Web 服务中的数据“正确”加载到 Rmarkdown 的仪表板中?
- javascript - React Hook 表单:使 append() 异步
- r - 在 GenomicRanges 包的后续或前面函数中包含重叠范围或基因