这是我的第一篇文章,我仍然是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]

但这有点麻烦,而且我不确定是否有更简单的方法来达到相同的结果。就像我说的那样,我仍然对Python和Scipy有所了解。

谢谢

最佳答案

您的问题的一个问题

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

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

进入列表,在回答之前我会问一个问题:
  • 为什么使用Nx1矩阵而不是数组?

  • 使用数组而不是矩阵

    如果您查看Matlab用户的Numpy Wiki/文档页面,第3部分将讨论'array' or 'matrix'? Which should I use?。简短的答案是您应该使用数组。

    使用数组的优点之一是:



    另外,如Numpy Reference Documentation中所述,“矩阵对象始终是二维的。”这就是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]
    

    如果您真的想使用矩阵

    如果出于某种原因您确实需要/想要使用矩阵而不是数组,则可以这样做:
    >>> import scipy
    >>> x = scipy.matrix([1,2,3]).transpose()
    >>> x
    matrix([[1],
            [2],
            [3]])
    >>> y = x.T.tolist()[0]
    >>> y
    [1, 2, 3]
    

    换句话说,x.T.tolist()[0]将:
  • 使用.T属性
  • 换位x矩阵
  • 使用.tolist()将转换后的矩阵转换为嵌套列表
  • 使用[0]捕获嵌套的第一个元素
  • 关于python - 从Scipy矩阵创建列表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4690366/

    10-12 14:28
    查看更多