python | 多维数组(矩阵等)转换为一维列表

简介

由于没有C++编程基础,从MATLAB跳到python感觉最难的一点就是各种数据类型的转换,列表里可以有矩阵,可以有一维矩阵、二维列表等,读取起来有一定的麻烦。

在读取时,首先放弃for循环操作,以免增加额外的计算量,这里总结了python将多维数组转换为一维列表的一些做法,以便下次使用。

方法一

参考网址:python将多维数据转为一维数组(总结)

这里面有两个我觉得比较实用的方法,一个是用functools.reduce操作。

functools.reduce的用法为:
reduce(function, sequence[, initial]) -> value

对sequence连续使用function, 如果不给出initial, 则第一次调用传递sequence的两个元素, 以后把前一次调用的结果和sequence的下一个元素传递给function. 如果给出initial, 则第一次传递initial和sequence的第一个元素给function.

具体介绍可参见:Python之functools.reduce使用

我们需要用到的为:对列表里的列表相加,示例程序如下:

a=[[1,3,5],[6]]
b=reduce(lambda x,y:x+y,a)
print('2.列表里面的列表相加—:',b)
# 输出为: [1, 3, 5, 6]
import operator
from functools import reduce
a = [[1,2,3], [4,6], [7,8,9,8]]
print(reduce(operator.add, a))
[1, 2, 3, 4, 6, 7, 8, 9, 8]

问题:
当输入为矩阵时,想实现将二维矩阵转为1维列表,首先将矩阵转为列表,再用reduce操作,会发现出现的结果并不是一维列表,而是列表中嵌套着二维列表和一维列表。
最后使用的方法为方法二。

方法二

使用:itertools.chain 语句。

具体操作为:

from itertools import chain

temp = list(chain(loc.tolist()))

备注:
将矩阵转为列表时,用a.tolist() 似乎比list(a)要好很多。
具体区别为:如果要转换一个二维矩阵A(A为23矩阵)为列表,那么list(A)会输出一个列表,中间每一个成员都是一个13维的数组;而A.tolist()会得到一个列表,中间每个成员也都是一个由3个成员组成的列表。

示例如下:

import numpy as np

x=np.array([[1,2,3],[4,5,6]])

t = x.tolist()
t1 = list(x)

print('x.tolist()的结果为:',t)
print('list(x)的结果为:', t1)

结果为:
x.tolist()的结果为: [[1, 2, 3], [4, 5, 6]]
list(x)的结果为: [array([1, 2, 3]), array([4, 5, 6])]

你可能感兴趣的:(python,学习总结,python)