如何计算维度不是连续的 N X N 矩阵中的转换
how to compute transition in a N X N matrix where the dimensions are not not sequential
我有以下数据:
import numpy as np
import pandas as pd
arr = np.array([0, 1, 2, 3, 4, 6, 7, 5])
x = pd.Series([0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,5,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7])
print(arr)
print(type(arr))
[0 1 2 3 4 6 7 5]
<class 'numpy.ndarray'>
下面的代码可以很好地处理上面的数据:
m = [[0] * len(arr) for _ in enumerate(arr)]
for (i, j) in zip(x, x[1:]):
m[i][j] += 1
但是,当数据如下:上面的代码会产生如下错误:
arr = np.arry([0, 1, 2, 3, 4, 6, 7])
x = pd.Series([0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7])
错误--
m[i][j] += 1
IndexError:列表索引超出范围
'''
我想这就是你在这里要做的。
import numpy as np
import pandas as pd
arr = np.array([0, 1, 2, 3, 4, 6, 7])
x = pd.Series([0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7])
m = [[0] * (np.max(arr)+1) for _ in enumerate(np.arange(np.max(arr)+1))]
for (i, j) in zip(x, x[1:]):
m[i][j] += 1
您在创建变量 m
时需要取 arr
的最大值,而不是它的长度。
@Ananda 是正确的,但你写的仍然有效,真正的问题是你传递了两种不同的类型
顶部是
arr = np.array([0, 1, 2, 3, 4, 6, 7, 5])
底部是
arr = np.arry([[0, 1, 2, 3, 4, 6, 7]])
你需要底部是
arr = np.arry([0, 1, 2, 3, 4, 6, 7])
注意缺少的第二组括号...
我有以下数据:
import numpy as np
import pandas as pd
arr = np.array([0, 1, 2, 3, 4, 6, 7, 5])
x = pd.Series([0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,5,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7])
print(arr)
print(type(arr))
[0 1 2 3 4 6 7 5]
<class 'numpy.ndarray'>
下面的代码可以很好地处理上面的数据:
m = [[0] * len(arr) for _ in enumerate(arr)]
for (i, j) in zip(x, x[1:]):
m[i][j] += 1
但是,当数据如下:上面的代码会产生如下错误:
arr = np.arry([0, 1, 2, 3, 4, 6, 7])
x = pd.Series([0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7])
错误--
m[i][j] += 1 IndexError:列表索引超出范围 '''
我想这就是你在这里要做的。
import numpy as np
import pandas as pd
arr = np.array([0, 1, 2, 3, 4, 6, 7])
x = pd.Series([0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7,0,1,2,3,4,6,7])
m = [[0] * (np.max(arr)+1) for _ in enumerate(np.arange(np.max(arr)+1))]
for (i, j) in zip(x, x[1:]):
m[i][j] += 1
您在创建变量 m
时需要取 arr
的最大值,而不是它的长度。
@Ananda 是正确的,但你写的仍然有效,真正的问题是你传递了两种不同的类型
顶部是
arr = np.array([0, 1, 2, 3, 4, 6, 7, 5])
底部是
arr = np.arry([[0, 1, 2, 3, 4, 6, 7]])
你需要底部是
arr = np.arry([0, 1, 2, 3, 4, 6, 7])
注意缺少的第二组括号...