从Scipy矩阵创建列表

dav*_*e85 5 python numpy scipy

这是我的第一篇文章,我仍然是Python和Scipy新人,所以对我来说很容易!我正在尝试将Nx1矩阵转换为python列表.说我有一些3x1矩阵

x = scipy.matrix([1,2,3]).transpose()

我的目标是从x创建一个列表y

y = [1, 2, 3]

我已经尝试过使用该tolist()方法,但它返回[[1], [2], [3]],这不是我追求的结果.我能做的最好的就是这个

y = [xi for xi in x.flat]
Run Code Online (Sandbox Code Playgroud)

但它有点麻烦,我不确定是否有更简单的方法来实现相同的结果.就像我说的那样,我仍然要掌握Python和Scipy ......

谢谢

Mat*_*kin 4

一个问题来回答你的问题

虽然 Sven 和 Navi 已经回答了您关于如何转换的问题

x = scipy.matrix([1,2,3]).transpose()
Run Code Online (Sandbox Code Playgroud)

在列表中,我会在回答之前问一个问题:

  • 为什么使用 Nx1 矩阵而不是数组?

使用数组代替矩阵

如果您查看 Numpy for Matlab 用户 wiki/文档页面,第 3 节讨论了“数组”或“矩阵”?我应该使用哪个?。简短的答案是你应该使用数组。

使用数组的优点之一是:

您可以将 1 阶数组视为行向量或列向量。dot(A,v) 将 v 视为列向量,而 dot(v,A) 将 v 视为行向量。这可以节省您输入大量转置的麻烦。

此外,正如Numpy 参考文档中所述,“矩阵对象始终是二维的”。这就是为什么为您x.tolist()返回一个嵌套列表。[[1], [2], [3]]

由于您想要一个 Nx1 对象,我建议使用数组,如下所示:

>>> import scipy
>>> x = scipy.array([1,2,3])
>>> x
array([1, 2, 3])
>>> y = x.tolist()     // That's it. A clean, succinct conversion to a list.
>>> y
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

如果你真的想使用矩阵

如果出于某种原因您确实需要/想要使用矩阵而不是数组,那么我会这样做:

>>> import scipy
>>> x = scipy.matrix([1,2,3]).transpose()
>>> x
matrix([[1],
        [2],
        [3]])
>>> y = x.T.tolist()[0]
>>> y
[1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

用言语来说,x.T.tolist()[0]意愿是:

  1. .T使用属性转置 x 矩阵
  2. 使用以下命令将转置矩阵转换为嵌套列表.tolist()
  3. 使用以下命令获取嵌套列出的第一个元素[0]