从Scipy矩阵创建列表

pvcm50d1  于 2022-12-13  发布在  其他
关注(0)|答案(3)|浏览(108)

这是我的第一篇博文,我还是一个Python和Scipy的新手,所以请对我手下留情!我正在尝试将一个Nx 1矩阵转换成一个Python列表。假设我有一些3x 1矩阵
x = scipy.matrix([1,2,3]).transpose()
我的目标是从x创建一个列表y,这样
y = [1, 2, 3]
我尝试过使用tolist()方法,但是它返回[[1], [2], [3]],这不是我想要的结果。

y = [xi for xi in x.flat]

但是它有点麻烦,而且我不确定是否有更简单的方法来实现相同的结果。
谢谢

f45qwnt8

f45qwnt81#

一个问题来回答你的问题

Sven和Navi已经回答了您关于如何转换

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

我会在回答之前先问一个问题:

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

使用数组代替矩阵

如果你查看Numpy for Matlab用户wiki/文档页面,第3节讨论了 “array”或“matrix”?我应该使用哪个?。简短的答案是你应该使用array。
使用数组的优点之一是:
可以将秩为1的数组视为行向量或列向量。dot(A,v)将v视为列向量,而dot(v,A)将v视为行向量。这可以保存您输入大量转置的时间。
此外,如Numpy参考文档中所述,“Matrix对象始终是二维的”。这就是x.tolist()为您返回[[1], [2], [3]]嵌套列表的原因。
由于您需要一个Nx 1对象,我建议您使用数组,如下所示:

>>> 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矩阵
1.使用.tolist()将转置矩阵转换为嵌套列表
1.使用[0]获取嵌套列表的第一个元素

khbbv19g

khbbv19g2#

不如

x.ravel().tolist()[0]

scipy.array(x).ravel().tolist()

相关问题