在实际应用的过程中,遇到列表或是数组的维数不同,需要变换的问题,如二维列表/数组变成了一维列表/数组
我的办法是
1、将二维的列表先变成二维的数组,然后用np.nditer()函数操作方便简单。
例如:
m = np.arange(6).reshape(2,3)
print("m,原始数组:\n",m)
n = []
for x in np.nditer(m):
print(x)
n.append(x)
print("n,新列表:",n)
输出:
原始数组:
[[0 1 2]
[3 4 5]]
0
1
2
3
4
5
n,新列表: [array(0), array(1),array(2), array(3), array(4), array(5)]
也可以对其中的数据改动,nditer 对象有另一个可选参数 op_flags,默认情况下,nditer 将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定 read-write 或者 write-only 的模式。
例:
import numpy as np
a = np.arange(1,60,5).reshape(3,4)
print("原始数组:\n",a)
b = []
for x in np.nditer(a,op_flags=['readwrite']):
x[...] = 2*x
print(x[...])
b.append(x[...])
print("修改后的数组:\n",a)
print("b列表:",b)
输出:
原始数组:
[[ 1 6 11 16]
[21 26 31 36]
[41 46 51 56]]
2
12
22
32
42
52
62
72
82
92
102
112
修改后的数组:
[[ 2 12 22 32]
[ 42 52 62 72]
[ 82 92 102 112]]
b列表: [array(2), array(12), array(22), array(32),array(42), array(52), array(62), array(72), array(82), array(92),array(102), array(112)]
2、利用numpy的flatten()
import numpy as np
a = [[1, 4], [3, 2], [5, 6]]
a = np.array(a).flatten().tolist()
print(a)
输出:
[1, 4, 2, 3, 5, 6]
3、常规一行写法
a = [[1, 4], [2], [3, 5, 6]]
a = [j for i in a for j in i]
print(a)
输出:
[1, 4, 2, 3, 5, 6]
更多见:
https://blog.csdn.net/weixin_43868107/article/details/102647760
https://blog.csdn.net/weixin_38705903/article/details/102882167