gpt4 book ai didi

python - 从 Scipy 矩阵创建列表

转载 作者:太空狗 更新时间:2023-10-30 01:24:14 25 4
gpt4 key购买 nike

这是我的第一篇文章,我仍然是 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 矩阵而不是数组?

使用数组代替矩阵

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

使用数组的优点之一是:

You can treat rank-1 arrays as either row or column vectors. dot(A,v) treats v as a column vector, while dot(v,A) treats v as a row vector. This can save you having to type a lot of transposes.

此外,如 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] 将:

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

关于python - 从 Scipy 矩阵创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4690366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com