一、数组和列表

列表不存在维度问题,数组是有维度的

np.array()把列表转化为数组

问题:数组和列表的转化问题

官方解释:

python np.array 大小 python 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一样。