【问题标题】:The Python Equivalent of the MATLAB function uniqueMATLAB 函数的 Python 等效项 unique
【发布时间】:2019-10-04 17:37:42
【问题描述】:

我知道有人问过这个问题,但我还没有找到答案。非常感谢任何帮助

在 Matlab 中写为:[C,ia,ic] = unique(A)

我对所有输出元素感兴趣,即Ciaic

这是 matlab 函数作用的示例

A = [9 2 9 5];
Find the unique values of A and the index vectors ia and ic, 
such that C = A(ia) and A = C(ic).

[C, ia, ic] = unique(A)
C = 1×3

     2     5     9

ia = 3×1

     2
     4
     1

ic = 4×1

     3
     1
     3
     2

请问如何在 python 中重现这个?如前所述,我对所有输出元素感兴趣,即Ciaic

【问题讨论】:

  • 请提供输入示例和您想要得到的结果。
  • 完成。抱歉,如果之前不清楚

标签: python python-3.x matlab group-by pandas-groupby


【解决方案1】:

使用numpy.unique的解决方案(感谢@SBad本人对解决方案质量的提升):

import numpy as np

A = np.array([9,2,9,5])

C, ia, ic = np.unique(A, return_index=True, return_inverse=True)

print(C)
print(ia)
print(ic)

输出

[2 5 9]
[1 3 0]
[2 0 2 1]

通过列表理解,您还可以获得ic

ic = [i for j in A for i,x in enumerate(C) if x == j]

注意

请记住,MATLAB 使用基于 1(一)的索引,而 Python 使用基于 0(零)的索引。

【讨论】:

  • 非常感谢您的回答。在数据框的上下文中,您将如何扩展上面的代码?例如,C, ia = np.unique(DF[['A', 'B', 'C']], return_index=True) 当我尝试它时,我得到了一个错误......任何进一步的都非常受欢迎,谢谢
  • @SBad 我认为您应该用数据框的示例提出一个新问题。在这里我们会把事情搞砸。
  • C, ia, ic = np.unique(A, return_index=True, return_inverse=True)
猜你喜欢
  • 2014-04-02
  • 2016-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 2021-04-22
  • 2014-03-06
  • 2013-03-29
  • 1970-01-01
相关资源
最近更新 更多