由于没有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])]