我有下面的<type 'numpy.ndarray'>
array_element = [('T10', 'R1T0') ('T20', 'R2T0') ('T31', 'R3T1') ('T21', 'R2T1')
('T10', 'R1T0') ('T20', 'R2T0')]我想以这样的方式计算在array_element中发生的元素的数量:
('T10', 'R1T0')的重复次数是('T20', 'R2T0')的两倍,所以最后的输出是:
array_element_count = [('T10', 'R1T0', 2) ('T20', 'R2T0', 2) ('T31', 'R3T1', 1)
('T21', 'R2T1', 1)]array_element是通过使用numpy创建的
dt = np.dtype([('x', np.str_, 16), ('y', np.str_, 16)])
array_element = np.zeros((len(strs),), dtype=dt)在计算将存储在这个数组中的每个项目的出现数时,我遇到了问题:
dt = np.dtype([('x', np.str_, 16), ('y', np.str_, 16), , ('z', np.int32)])
array_element_count = np.zeros((len(strs),), dtype=dt)发布于 2019-07-24 14:04:55
您可以使用collections.Counter方法来计数出现的事件,并在以后合并到现有的元组:
[k + (v,) for k, v in Counter(array_element).items()]示例
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)]发布于 2019-07-24 14:17:11
您可以在numpy中使用“唯一”属性。
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)然后你就能得到答案了。
print (uniq_array)
print (count_array)['T10‘’R1T0‘['T20’'R2T0'] [T21‘'R2T1'] [T31 'R3T1']
发布于 2019-07-24 15:06:17
你可以使用熊猫,这是快速。
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))输出
[(('T10', 'R1T0'), 2),
(('T20', 'R2T0'), 2),
(('T31', 'R3T1'), 1),
(('T21', 'R2T1'), 1)]或者另一种解决方案,只有numpy:
b = np.unique(array_element,return_counts=True, axis=0)
list(zip(zip(*b[0].T.tolist()), b[1]))输出
[(('T10', 'R1T0'), 2),
(('T20', 'R2T0'), 2),
(('T21', 'R2T1'), 1),
(('T31', 'R3T1'), 1)]https://stackoverflow.com/questions/57184772
复制相似问题