【发布时间】:2021-03-20 21:43:03
【问题描述】:
我正在使用以下函数来生成转换表:
import numpy as np
import pandas as pd
def make_table(allSeq):
n = max([ max(s) for s in allSeq ]) + 1
arr = np.zeros((n,n), dtype=int)
for seq in allSeq:
ind = (seq[1:], seq[:-1])
arr[ind] += 1
return pd.DataFrame(arr).rename_axis(index='Next', columns='Current')
但是,我的结果不正确:
list1 = [1,2,3,4,5,4,5,4,5]
list2 = [4,5,4,5]
make_table([list1, list2])
Current 0 1 2 3 4 5
Next
0 0 0 0 0 0 0
1 0 0 0 0 0 0
2 0 1 0 0 0 0
3 0 0 1 0 0 0
4 0 0 0 1 0 2
5 0 0 0 0 2 0
例如,转换 4->5 应计算 5 次,但每个序列仅计算一次 (2)。我知道问题出在arr[ind] += 1 行,但我就是想不通!我是嵌套另一个循环,还是有一种巧妙的方法可以一次添加实例总数?谢谢!
【问题讨论】:
标签: python arrays pandas numpy