列表、数组、张量的联系与区别

1. list和ndarray

最大区别在于在内存中存储方式不同

相同:

  • 列表 ( list ) 与数组(ndarray)类似,是具有相同类型的多个元素构成的整体。
  • list和array都可以根据索引、切片来取其中的元素。

区别:

  • 数组在内存中是连续的,数组里的元素都是同一类,所以一旦确定了一个数组,它的内存就确定了,因此不能像列表一样通过.append()追加。列表中保存的是数据的存放的地址,简单的说就是指针并非数据,所以可以可以存储不同的类型,由于地址不用连续,所以可以通过.append()把元素的地址追加进去,由于每个元素都需要一个地址,增加了堆内存和CPU的开支。

  • 列表不能对整体进行数值运算,但是数组能对整体进行数值运算 。

  • 数组底层使用C语言编写,运算速度快,并且具有强大的运算能力。

import numpy as np

# 1. 列表
a = [1, 2]
a.append(3)
print("数组可以追加为:", a)

# 2. 数组
b = np.array([1, 2])
# b.append(3) # 会报错“'numpy.ndarray' object has no attribute 'append'”

2. ndarray和tensor

最大区别在于值是否可以改变(数据运行的设备)

相同:

  • tensor内部的数据类型为ndarray类型

区别:

  • tensor可以有加速器内存(如GPU)支持,既可以在CPU上运行也可以在GPU上运行。ndarray只能在CPU上运行。
  • ndarray在CPU上运行,因此可以改变其数值。tensor的值可以驻留在GPU上加速,GPU不具有改变元素值的能力,因此tensor的值不可以改变。
import tensorflow as tf
import numpy as np

# 1. ndarray
a = np.array([1, 2, 3])
a[1] = 3
print("可以改变数组值为:", a)

# 2. tensor
b = tf.constant([1, 2, 3])
# b[1] = 3  # 会报错“'tensorflow.python.framework.ops.EagerTensor' object does not support item assignment”
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值