【问题标题】:double brackets arrays into an array双括号数组成数组
【发布时间】:2017-07-31 21:57:36
【问题描述】:

我有一个稳态分布矩阵,结果就是这样出来的。

[[ 0.43397114,  0.00939583,  0.55663303]
[ 0.43397114,  0.00939583,  0.55663303]
[ 0.43397114,  0.00939583,  0.55663303]]

例如,我想选择其中一个作为P[0]。但它的出现是

[[ 0.43397114,  0.00939583,  0.55663303]] 

谁能告诉我如何选择和转换其中一个,因为它们是相同的,以便它可以针对假设X = np.linspace(100,100,3) 进行绘制

【问题讨论】:

  • 您粘贴的原始代码在语法上不正确。请先修复它。提示:它至少需要 8 个逗号,也许更多,
  • 你想看什么?
  • 我只想选择一个分布并将其与 X 相对应。基本上双括号问题会导致问题。
  • 您似乎在使用np.matrix。如果你不再使用它,那么这种类型的问题就会消失

标签: python arrays numpy markov-chains


【解决方案1】:

好吧,我只是假设您可能想要从list of lists 制作list

In [1]: import numpy as np

In [2]: P = [[ 0.43397114,  0.00939583,  0.55663303],
   ...: [ 0.43397114,  0.00939583,  0.55663303],
   ...: [ 0.43397114,  0.00939583,  0.55663303]]

In [3]: P = np.array(P)

In [4]: P = P.flatten()

In [5]: P
Out[5]:
array([ 0.43397114,  0.00939583,  0.55663303,  0.43397114,  0.00939583,
        0.55663303,  0.43397114,  0.00939583,  0.55663303])

现在您可以轻松地绘制它们。我希望这就是你的意思。

【讨论】:

    【解决方案2】:

    如果您创建了np.matrix,我预计会出现这种行为:

    In [37]: mat=np.matrix([[ 0.43397114,  0.00939583,  0.55663303]
        ...: ,[ 0.43397114,  0.00939583,  0.55663303]
        ...: ,[ 0.43397114,  0.00939583,  0.55663303]])
        ...: 
    In [38]: mat
    Out[38]: 
    matrix([[ 0.43397114,  0.00939583,  0.55663303],
            [ 0.43397114,  0.00939583,  0.55663303],
            [ 0.43397114,  0.00939583,  0.55663303]])
    In [39]: mat[0]
    Out[39]: matrix([[ 0.43397114,  0.00939583,  0.55663303]])
    

    该数组子类在索引时保留二维维度。

    如果它是一个数组,则索引行将是 1d

    In [42]: mat.A[0]
    Out[42]: array([ 0.43397114,  0.00939583,  0.55663303])
    

    但我对你是如何得到那个特定的显示器感到困惑。没有matrix(。内部列表中有逗号,但外部列表之间没有逗号。如果是真的,这可能意味着你有一个列表数组,而不是 2d。但是我不会期望这种索引行为。

    【讨论】:

      【解决方案3】:

      您似乎正在尝试使用 2D 或嵌套列表。

      您可以使用以下方法创建它:

      p = [[ 0.43397114,  0.00939583,  0.55663303],
         [ 0.43397114,  0.00939583,  0.55663303],
         [ 0.43397114,  0.00939583,  0.55663303]]
      

      p[0] 将访问第一个数组,即 [ 0.43397114, 0.00939583, 0.55663303]

      p[0][0] 将访问第一个数组的第一个元素,即 0.43397114

      【讨论】:

      • 我认为可能只有一行可以做到这一点。所以我应该访问每个元素然后创建一个新列表?
      • 无需创建新列表。只需了解当您执行p[0] 时返回的第一个对象已经是一个列表。然后像通常访问列表一样访问所需的元素。
      • 您在最初的问题中写的内容对我来说没有多大意义。您能否在不使用每个句子只有一个方向的任何代词的情况下改写它,以便我确切地知道您要做什么? @Eric Enkele
      【解决方案4】:

      您的“矩阵”实际上只是一个列表列表。因此,当您说p[0] 时,您真正在做的是访问列表的第一个成员。其中,在这种情况下是列表。例如,如果您想获取该列表的第一个元素,您可以使用p[0][0]。或p[0][1]。或者p[2][2]

      另外,您可以使用numpy.matrix 来执行此操作。

      import numpy as np
      
      p = np.matrix("1, 2, 3; 4, 5, 6; 7, 8, 9")
      foo = p.item(0)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-12
        • 2012-09-17
        • 2021-02-14
        • 2019-01-13
        • 2011-07-05
        相关资源
        最近更新 更多