【问题标题】:how to compute transition in a N X N matrix where the dimensions are not not sequential如何在维度不连续的 N X N 矩阵中计算转换
【发布时间】:2021-01-31 03:53:35
【问题描述】:

我有以下数据:

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:列表索引超出范围 '''

【问题讨论】:

    标签: python arrays pandas numpy zip


    【解决方案1】:

    @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])
    

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

    【讨论】:

      【解决方案2】:

      我想这就是你在这里的本意。

      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 的最大值,而不是它的长度。

      【讨论】:

      • 现在,当我运行以下代码时,我得到了一个不同的错误:` for row in m: s = sum(row) if s > 0: row[:] = [f / s for f in row] transition_matrix = m for i in transition_matrix: assert sum(i[:]) == 1, "不求和为 1,检查转换矩阵"` 错误:AssertionError: 不求和为 1,检查转换矩阵
      • 这听起来完全是一个完全不同的错误。您最好不要尝试为每个问题修复一个以上的错误,因为从您的帖子中很难理解问题是什么。如果您的原始问题已解决,请考虑关闭此问题并将其作为新问题发布。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2023-01-19
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      相关资源
      最近更新 更多