【问题标题】:efficient way to convert pandas series of strings to numpy frequency matrix将 pandas 系列字符串转换为 numpy 频率矩阵的有效方法
【发布时间】:2021-05-15 09:53:51
【问题描述】:

我有:

  1. 英文字符列表,a 到 z:char_list
  2. 字符串系列

我想创建一个 numpy 矩阵,其中每一行对应于系列中同一行的字符串,每一列对应于列表中同一索引处的字符。

示例:

series: [[ab],[ac],[aa]]
chars = [a,b,c]
result = [[110],[101],[200]]

这是我现在的做法:

def create_char_matrix(strings, symbol_list):
    
    mat = np.zeros((strings.shape[0],len(symbol_list)))
    
    for i, line in enumerate(strings):
        for c in line:
            mat[i,symbol_list.index(c)] += 1 
 
    
    return mat

这不是很快,考虑到通常有比嵌套 for 循环更好的解决方案。

关于如何加快这一进程的任何想法?

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    你可以把字符串拆分成字符,然后crosstab:

    s = pd.Series(['ab','ac','aa'])
    chars=['a','b','c']
        
    a = s.str.split('').str[1:-1].explode()
    pd.crosstab(a.index, a).reindex(chars, axis=1, fill_value=0).values
    

    输出:

    array([[1, 1, 0],
           [1, 0, 1],
           [2, 0, 0]])
    

    【讨论】:

      猜你喜欢
      • 2018-07-25
      • 2012-08-28
      • 2016-08-26
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 2019-11-24
      相关资源
      最近更新 更多