【问题标题】:how to get a numpy array from frequency and indices如何从频率和索引中获取一个 numpy 数组
【发布时间】:2020-02-06 01:57:04
【问题描述】:

我有一个这样的 numpy 数组:

nparr = np.asarray([[u'fals', u'nazi', u'increas', u'technolog', u'equip', u'princeton', 
                     u'realiti', u'civilian', u'credit', u'ten'],
                    [u'million', u'thousand', u'nazi', u'stick', u'visibl', u'realiti', 
                     u'west', u'singl', u'jack', u'charl']])

我需要做的是计算每个项目的频率,并在同一位置有另一个与每个项目的频率对应的numpy数组。

所以,这里我的数组形状是(2, 10)。我需要有一个形状为(2, 10) 但具有频率值的numpy 数组。因此,上面的输出将是:

[[1, 2, 1, 1, 1, 1, 2, 1, 1, 1]
 [1, 1, 2, 1, 1, 2, 1, 1, 1, 1]]

到目前为止我做了什么:

unique, indices, count = np.unique(nparr, return_index=True, return_counts=True)

虽然通过这种方式计数是唯一值的频率,但它并没有给我与原始数组相同的形状。

【问题讨论】:

  • 你有一个丢失的报价,SO的代码标记很容易找到和修复
  • @MadPhysicist 我没听明白,缺少的报价是什么!
  • u'realiti 缺少报价
  • 糟糕感谢您提到@yatu。已更新。
  • 不用担心。我提出了一个更简单的答案。你离开是因为你想要倒排索引,而不是原始索引。

标签: python arrays numpy


【解决方案1】:

您需要使用return_inverse 而不是return_index

_, i, c = np.unique(nparr, return_inverse=True, return_counts=True)

_ 是表示丢弃返回值的约定。您不需要唯一值来知道计数的去向。

您可以通过简单的索引操作获得按原始数组顺序排列的计数。当然,解开原始形状是必要的:

c[i].reshape(nparr.shape)

【讨论】:

  • 没想到这里用return_inverse,肯定更简单
  • @yatu。诀窍是return_inverse。我认为这个论点只是为了这类问题而添加的。
  • 逆我的意思是是的。知道它,只是出于某种原因searchsorted 我想到了:)
  • Tahnks 它更简单。
猜你喜欢
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 2021-06-03
  • 2021-03-10
  • 1970-01-01
  • 2018-10-25
相关资源
最近更新 更多