如何在Numpy/Python中切片序列并获得它们的频率



我需要帮助编写代码,将字符串列表分解为特定值,然后以类似网格的方式运行每个字符串的频率。例如:

a = ['ABGD','HDIW','ABHD']
b = ['AB','GD','HD','IW','AB','HD'] #breaking by two
#look something like this (please ignore periods):
AB   HD.  GD.  HD.   IW.   
2.   2.   1.   1.    1. 

我更喜欢在Numpy中完成。以下是目前为止我所做的,但是第一部分(列表被分解的地方)只分解单个字符串,而不是一个集合值:

brk_str = [list(i) for i in a]
brk_arr = np.array(brk_str)
unique_elements, counts_elements = np.unique(brk_arr, return_counts=True)
print(np.asarray((unique_elements, counts_elements)))

谢谢!

另一种将字符串分割为2

的方法
In [753]: b = []
...: for word in a:
...:     b.extend([word[:2],word[2:]])
In [754]: b
Out[754]: ['AB', 'GD', 'HD', 'IW', 'AB', 'HD']

将字符串分成几个部分是一个字符串操作。numpy本身不实现任何特殊的字符串方法。即使np.char函数也使用字符串方法。

可以在列表推导式中使用double-for

brk_str = [x for i in a for x in (i[:2], i[2:])]
brk_arr = np.array([x for i in a for x in (i[:2], i[2:])])
unique_elements, counts_elements = np.unique(brk_arr, return_counts=True)
print(np.asarray((unique_elements, counts_elements)))
[['AB' 'GD' 'HD' 'IW']
['2' '1' '2' '1']]

对给定数量的数据进行操作的经典方法是collections.Counter

c = Counter([x for i in a for x in (i[:2], i[2:])])
print(c)  # {'AB': 2, 'HD': 2, 'GD': 1, 'IW': 1}

最新更新