20_NumPy数组ndarray和Python标准列表相互转换

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

你可能感兴趣的:(Numpy,python,numpy)