20_NumPy数组ndarray和Python标准列表相互转换
NumPy数组ndarray和Python标准列表类型列表可以相互转换。
- 将列表类型列表转换为NumPy数组ndarray:numpy.array()
- 将NumPy数组ndarray转换为列表类型列表:tolist()
尽管为方便起见使用了“转换”一词,但实际上会生成一种新型的对象,而原始对象保持不变。
将列表类型列表转换为NumPy数组ndarray:numpy.array()
生成NumPy数组numpy.ndarray如果将Python列表类型对象传递给numpy.array()的参数,则会基于列表生成ndarray
import numpy as np
l_1d = [0, 1, 2]
arr_1d = np.array(l_1d)
print(arr_1d)
print(arr_1d.dtype)
# [0 1 2]
# int64
生成的ndarray的数据类型dtype是自动从原始列表中确定的,但是也可以通过参数dtype来指定。
arr_1d_f = np.array(l_1d, dtype=float)
print(arr_1d_f)
print(arr_1d_f.dtype)
# [0. 1. 2.]
# float64
这同样适用于二维或更多维的多维数组。
l_2d = [[0, 1, 2], [3, 4, 5]]
arr_2d = np.array(l_2d)
print(arr_2d)
# [[0 1 2]
# [3 4 5]]
由于标准的Python多维数组只是一个嵌套列表(列表列表),因此列表中元素的数量是否不匹配并不重要,但是如果将其原样传递给numpy.array() ,将生成具有列表类型对象的ndarray,该列表类型对象具有不同数量的元素作为元素。
l_2d_error = [[0, 1, 2], [3, 4]]
arr_2d_error = np.array(l_2d_error)
print(arr_2d_error)
# [list([0, 1, 2]) list([3, 4])]
print(arr_2d_error.dtype)
# object
print(arr_2d_error.shape)
# (2,)
将NumPy数组ndarray转换为列表类型列表:tolist()
NumPy数组ndarray的tolist()方法返回一个列表类型对象。
可以根据原始ndarray的维数获得嵌套列表。可以通过重复索引[n]来访问每个元素。
一维。
arr_1d = np.arange(3)
print(arr_1d)
# [0 1 2]
l_1d = arr_1d.tolist()
print(l_1d)
# [0, 1, 2]
二维
arr_2d = np.arange(6).reshape((2, 3))
print(arr_2d)
# [[0 1 2]
# [3 4 5]]
l_2d = arr_2d.tolist()
print(l_2d)
# [[0, 1, 2], [3, 4, 5]]
三维
arr_3d = np.arange(24).reshape((2, 3, 4))
print(arr_3d)
# [[[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
# [[12 13 14 15]
# [16 17 18 19]
# [20 21 22 23]]]
l_3d = arr_3d.tolist()
print(l_3d)
# [[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]], [[12, 13, 14, 15], [16, 17, 18, 19], [20, 21, 22, 23]]]
print(l_3d[0])
# [[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]
print(l_3d[0][0])
# [0, 1, 2, 3]
print(l_3d[0][0][0])
# 0