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
  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值