我使用numpy的dot()函数,将一个3x3的矩阵与一个1x3的numpy.array相乘。输出例如为:
[[ 0.16666667 0.66666667 0.16666667]]
它的类型是:
<class 'numpy.matrixlib.defmatrix.matrix'>
我该如何将这个矩阵转换为列表。因为我知道结果始终是一个1x3的矩阵,所以应该将其转换为一个列表,因为我稍后需要循环遍历它以计算两个列表之间的Pearson距离。
总结一下:我该如何从这个矩阵创建一个列表?
可能不是最优的方法,但以下代码可以实现:
a = numpy.matrix([[ 0.16666667, 0.66666667, 0.16666667]])
list(numpy.array(a).reshape(-1,))
或者numpy.array(a).reshape(-1,).tolist()
或者numpy.array(a)[0].tolist()
在矩阵对象上使用tolist()方法:
>>> import numpy
>>> m = numpy.matrix([1, 2, 3])
>>> type(m)
<class 'numpy.core.defmatrix.matrix'>
>>> m.tolist()
[[1, 2, 3]]
如果a
是你的矩阵,尝试以下代码
a.ravel().tolist()
但是您不需要将其转换为列表来进行迭代。
[0]
来检索该单个项即可。 - Sven Marnachravel()
是多余的:b.tolist() == b.ravel().tolist()
>>> True
- Martin另一种方法:
>>> import numpy as np
>>> m = np.matrix([1,2,3])
>>> np.array(m).flatten().tolist()
[1,2,3]
list(a.flat)
>>> import numpy as np
>>> a = np.matrix([[ 0.16666667, 0.66666667, 0.16666667]])
>>> a
matrix([[ 0.16666667, 0.66666667, 0.16666667]])
>>> a.flat
<numpy.flatiter object at 0x0000000002DE8CC0>
>>> a.flat.tolist()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'numpy.flatiter' object has no attribute 'tolist'
>>> list(a.flat)
[0.16666666999999999, 0.66666667000000002, 0.16666666999999999]
m = numpy.matrix([[ 0.16666667, 0.66666667, 0.16666667]])
a = numpy.array(m)[0]
for i in a:
print i
结果是
0.16666667
0.66666667
0.16666667
import mumpy as np # to create a numpy array example
a = np.array([1,2.5,3]) # your 1D numpy array
b = [i for i in a] # your list out of the original numpy array
我认为getA1()
可以完成这项工作。
来自文档:
getA1()
返回展平的ndarray。
等同于np.asarray(x).ravel()
来自https://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.getA1.html
import numpy as np
a = np.matrix([[1,2,3,4]])
b = map(float, a.transpose())
我来这里是为了寻找一种将numpy矩阵转换为典型的二维列表的方法。
对于一个numpy矩阵m:
my_2d_list = map(list, list(m.A))
my_1d_list = list(list(m.A)[0])