【问题标题】:Python from matrix to 1-D arrayPython从矩阵到一维数组
【发布时间】:2017-03-09 20:07:21
【问题描述】:

我需要将 B 转换为一维数组 我有一个矩阵,我试图将其转换为一维数组。 但是,我得到一个包含 1 个单元的数组,其中包含一维数组。 我该如何解决?

Python 代码:

import numpy as np


def computecoreset():
    a = np.matrix('1 2 19 22; 3 4 28 11')
    B = a.ravel()
    cal = np.random.choice(B, 3)
    return cal

print(computecoreset())

但是:

B = [[ 1  2 19 22  3  4 28 11]]

不一样的

[ 1  2 19 22  3  4 28 11]

提前致谢

【问题讨论】:

    标签: python arrays python-2.7 numpy matrix


    【解决方案1】:

    a.ravel()NumPy matrix 的一个方法,它仍然是一个矩阵,NumPy 矩阵不能是1D。因此,我们可以改为使用NumPy's ravel() 方法转换为扁平的一维 NumPy 数组,就像这样 -

    np.ravel(a)
    

    示例运行 -

    In [40]: a
    Out[40]: 
    matrix([[ 1,  2, 19, 22],
            [ 3,  4, 28, 11]])
    
    In [41]: np.ravel(a)
    Out[41]: array([ 1,  2, 19, 22,  3,  4, 28, 11])
    

    【讨论】:

    • @hpaulj 不错! OP也应该考虑这一点。感谢您向我们指出!
    【解决方案2】:

    使用np.array 定义您的二维数组。

    至少在我看来,将数据指定为字符串的额外便利(如在您的示例中)以及具有一些适用于附加到 matrix 对象的二维数组的方法,至少在我看来,被后者数据的较小灵活性所抵消结构,尤其是大多数涉及matrix 的表达式会导致matrix 结果,即使这不是您要查找的内容。

    例如,双矩阵乘积,即标量,当它涉及matrix 对象时,它是一个二维矩阵,您将看到以下重复的习语

    x = np.matrix('1;2;3')
    K = np.matrix('1 2 3; 2 4 5; 3 5 6')
    
    V = 0.5 * (x.T*K*x)[0,0]
    

    当您希望将弹性系统的应变能表示为独立浮点值时。

    另请注意,使用arrays,您无需再写了

    V = 0.5*np.dot(x.T, np.dot(K, x))
    

    但你可以使用新语法

    V = 0.5 * x.T@K@x
    

    也就是说,如果你仍然想要matrixthe answer by Divakar 正是你想要的,你接受它是正确的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 2013-06-23
      • 2021-06-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多