如何计算维度不是连续的 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])

注意缺少的第二组括号...