python - 从 Scipy 矩阵创建列表

标签 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]

但这有点麻烦,我不确定是否有更简单的方法可以达到相同的结果。就像我说的,我仍然在掌握 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/

相关文章:

python - 使用 python 中的 optimize.leastsq 方法获取拟合参数的标准误差

python - 替换空白

python - 如何将配置数据保存在文件中

python - 根据列减去2个pyspark数据帧

python - 如何在 numpy 中对 cvxopt 矩阵执行运算?

python - 在网格中绘制多个直方图

python - Numpy 给出 "TypeError: can' t 将序列乘以 'float' 类型的非整数“

python - 需要使用其列将新的 DateTime 列添加到已有的数据框

python - 使用 numpy 向量化 "pure"函数,假设有很多重复项

python |绘制并拟合 (1/A)e^(-x/A) 形式的数据拟合,其中 A 是常数