一、数组和列表
列表不存在维度问题,数组是有维度的
np.array()把列表转化为数组
问题:数组和列表的转化问题
官方解释:
二、代码实例分析
(1)列表嵌套一维数组,然后np.array(列表)
1.定义一个空列表sub_f
2.定义两个数组index_x、index_y
sub_f = []
index_x=np.array([i for i in range(16)]).reshape(1,16)
index_y=np.array([i for i in range(16,32)]).reshape(1,16)
print(index_x)
print(index_y)
问题1:index_x、index_y是几维的?可见都是1×16的二维数组,因为两个中括号。
[[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]]
[[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]]
问题2:index_x[0]是数组还是列表?可见依然是数组,没有逗号,一维数组(对比如下列表b可知)
b=[0,1,2,3,4,5,6,7,8]
print(b)
print(index_x[0])
[0, 1, 2, 3, 4, 5, 6, 7, 8]
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
3.给sub_f空列表添加一维数组index_x[0]、index_y[0]
sub_f.append(index_x[0])
sub_f.append(index_y[0])
print(sub_f)
结果:此时的sub_f是一个嵌套了两个一维数组的列表
[array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), array([16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])]
[0, 1, 2, 3, 4, 5, 6, 7, 8]
4.将sub_f转为数组
l = np.array(sub_f)
print(l)
结果:此时的l是2×16的二维数组
[[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]]
(2)列表嵌套二维数组
5.继续定义一个空列表L,给L空列表添加l,添加两次l
L=[]
L.append(l)
L.append(l)
print(L)
问题3:此时的L是什么样的?是一个嵌套了两个2×16二维数组的列表
[array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]]), array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15],
[16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31]])]
6.将L转为数组
ll=np.array(L)
print(ll)
问题4:此时的ll是什么样的?有几个中括号?是一个2×2×16的三维数组,由三个中括号
[[[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]]
[[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]]]
(3)那么问题来了,如果直接嵌套两次sub_f列表和(2)中嵌套两次l数组np.array之后的结果是一样的吗?
我们先再来看看sub_f和l分别是什么样的
由前面可以知道sub_f和l
print(sub_f)
print(l)
sub_f嵌套了两个一维数组的列表,l是2×16的二维数组
[array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), array([16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])]
[[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]]
7.继续定义一个空列表LLL,给LLL空列表添加sub_f,添加两次
LLL=[]
LLL.append(sub_f)
LLL.append(sub_f)
print(LLL)
问题5:此时的LLL是什么样的?是一个嵌套了四个一维数组的列表
[[array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), array([16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])], [array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]), array([16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31])]]
8.将LLL转为数组
aaa=np.array(LLL)
print(aaa)
[[[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]]
[[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
[16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31]]]
可见与(2)中的ll一样。