首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算numpy数组中每个项的出现数

如何计算numpy数组中每个项的出现数
EN

Stack Overflow用户
提问于 2019-07-24 14:01:08
回答 3查看 215关注 0票数 0

我有下面的<type 'numpy.ndarray'>

代码语言:javascript
复制
array_element = [('T10', 'R1T0') ('T20', 'R2T0') ('T31', 'R3T1') ('T21', 'R2T1')
 ('T10', 'R1T0') ('T20', 'R2T0')]

我想以这样的方式计算在array_element中发生的元素的数量:

('T10', 'R1T0')的重复次数是('T20', 'R2T0')的两倍,所以最后的输出是:

代码语言:javascript
复制
array_element_count = [('T10', 'R1T0', 2) ('T20', 'R2T0', 2) ('T31', 'R3T1', 1) 
('T21', 'R2T1', 1)]

array_element是通过使用numpy创建的

代码语言:javascript
复制
dt = np.dtype([('x', np.str_, 16), ('y', np.str_, 16)])
array_element = np.zeros((len(strs),), dtype=dt)

在计算将存储在这个数组中的每个项目的出现数时,我遇到了问题:

代码语言:javascript
复制
dt = np.dtype([('x', np.str_, 16), ('y', np.str_, 16), , ('z', np.int32)])
array_element_count = np.zeros((len(strs),), dtype=dt)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-24 14:04:55

您可以使用collections.Counter方法来计数出现的事件,并在以后合并到现有的元组:

代码语言:javascript
复制
[k + (v,) for k, v in Counter(array_element).items()]

示例

代码语言:javascript
复制
from collections import Counter

array_element = [('T10', 'R1T0'), ('T20', 'R2T0'), ('T31', 'R3T1'), ('T21', 'R2T1'),
 ('T10', 'R1T0'), ('T20', 'R2T0')]

print([k + (v,) for k, v in Counter(array_element).items()])
# [('T10', 'R1T0', 2) ('T20', 'R2T0', 2) ('T31', 'R3T1', 1) ('T21', 'R2T1', 1)]
票数 2
EN

Stack Overflow用户

发布于 2019-07-24 14:17:11

您可以在numpy中使用“唯一”属性。

代码语言:javascript
复制
array_element = np.array([('T10', 'R1T0'), ('T20', 'R2T0'), ('T31', 'R3T1'), ('T21', 'R2T1'),
 ('T10', 'R1T0'), ('T20', 'R2T0')])
uniq_array,count_array = np.unique(array_element,axis=0, return_counts=True)

然后你就能得到答案了。

代码语言:javascript
复制
print (uniq_array)
print (count_array)

['T10‘’R1T0‘['T20’'R2T0'] [T21‘'R2T1'] [T31 'R3T1']

票数 2
EN

Stack Overflow用户

发布于 2019-07-24 15:06:17

你可以使用熊猫,这是快速。

代码语言:javascript
复制
import pandas as pd

array_element = [('T10', 'R1T0'), ('T20', 'R2T0'), ('T31', 'R3T1'),
                 ('T21', 'R2T1'), ('T10', 'R1T0'), ('T20', 'R2T0')]
k = pd.Index(tuple(array_element)).value_counts()
list(zip(k.index, k))

输出

代码语言:javascript
复制
[(('T10', 'R1T0'), 2),
 (('T20', 'R2T0'), 2),
 (('T31', 'R3T1'), 1),
 (('T21', 'R2T1'), 1)]

或者另一种解决方案,只有numpy:

代码语言:javascript
复制
b = np.unique(array_element,return_counts=True, axis=0)
list(zip(zip(*b[0].T.tolist()), b[1]))

输出

代码语言:javascript
复制
[(('T10', 'R1T0'), 2),
 (('T20', 'R2T0'), 2),
 (('T21', 'R2T1'), 1),
 (('T31', 'R3T1'), 1)]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57184772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档