从矩阵到1-D数组的Python

时间:2016-10-27 08:16:52

标签: python arrays python-2.7 numpy matrix

我需要将B转换为1-D数组 我有一个矩阵,我试图转向一维数组。 但是我得到一个带有1个单元的数组,它保存着1-D数组。 我该如何解决?

Python CODE:

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]

提前致谢

2 个答案:

答案 0 :(得分:1)

a.ravel()作为NumPy matrix的方法仍会将其保留为矩阵,而NumPy矩阵不能为1D。所以,我们可以使用NumPy's ravel()方法转换为扁平的1D 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])

答案 1 :(得分:0)

使用np.array定义2D数组。

将数据指定为字符串的额外方便,如示例所示,并且对于附加到matrix对象的2D数组有一些适当的方法,至少在我看来,由于它的微小灵活性而失去平衡。后一种数据结构,特别是涉及matrix导致matrix结果的大多数表达式,即使这不是您正在寻找的结果。

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

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]

当你想要弹性系统的应变能表示为独立浮点值时。

另请注意,使用array s,您无需再编写

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

但您可以使用新语法

V = 0.5 * x.T@K@x

也就是说,如果您仍然需要matrix,则the answer Divakar正是您想要的,而您接受它是正确的。