深度学习入门(一):Tensor
Numpy
- 主要特点:Numpy的核心是ndarray,这是一个多维数组,用来存储同质数据类型的元素。
- 创建一维数组
data=np.array([1,2,3,4])
- 创建二维数组
data=np.array([[1,2,3,4],[4,5,6,7]])
- 创建全0数组
data=np.zeros(shape=(5,3))
shape(5,3)表示创建5行3列的数组
- 创建全1数组
data=np.ones(shape=(5,3))
- 创建全空数组
data=np.empty(shape=(5,3))
这里的数据都是无限小的,无限接近于0但不是0 - 创建有连续序列的数组arrange
data = np.arange(10,16,2)
# 10-16的数据,步长为2
所以这里的data是10 12 14 - 创建有连续间隔的数组
linspace
在一个指定区间内按照指定的步长,将区间均等分,生成的是一个线段类型的数组。生成的线性间隔数据中,是有把区间的两端加进去的data= np.linspace(1,10,20)
# 开始端1,结束端10,且分割成20个数据,生成线段 - 创建随机数组
data = np.random.rand(3,4)
也可以用data=np.random.randint(2,5,size=(4,5))
- 改变数组形状
data.reshape
- 数组转置 ` np.array`
- 数组维度
data.ndim
- 数组形状
data.shape
- 数组中的元素个数
data.size
- 数组的数据类型
data.dtype
- 计算数组的平均值
numpy.mean(arr, axis=None, dtype=None, out=None)
参数axis表示沿着哪个轴进行计算,默认为None,表示计算整个数组的平均值;dtype表示返回结果的数据类型,默认为float64;out表示将结果存储在指定的数组中 - 计算数组的中位数
numpy.median(arr, axis=None, out=None)
- 计算数组的标准差
numpy.std(arr, axis=None, dtype=None, out=None)
- 计算数组的方差
numpy.var(arr, axis=None, dtype=None, out=None)
- 计算数组的最小值
numpy.min(arr, axis=None, out=None)
- 计算数组的最大值
numpy.max(arr, axis=None, out=None)
- 计算数组的元素之和
numpy.sum(arr, axis=None, dtype=None, out=None)
- 计算数组的元素乘积
numpy.prod(arr, axis=None, dtype=None, out=None)
- 计算数组的累积和
numpy.cumsum(arr, axis=None, dtype=None, out=None)
- 一维数组切片。切片操作是左闭右开的,即包括起始位置,但不包括结束位置。例如,如果我们想要获取从索引1到索引3的元素,可以使用切片操作arr[1:4],结果为[2, 3, 4]
arr = np.array([1,2,3,4,5]) print(arr[1:4])
- 多维数组切片。
data[0:1,0:2]
本质上就是进行一维一维的分解操作 - 数组垂直堆叠
stacked_vertically = np.vstack((array1, array2))
- 数组水平堆叠
stacked_horizontally = np.hstack((array1, array2))
- 保存数组
np.save('my_array.npy', data)
- 加载数组
loaded_data = np.load('my_array.npy')
Tensor Tutorial Here
Tensor是PyTorch中最重要的数据结构,它可以是一个数(标量)、一维数组(向量)、二维数组(如矩阵、黑白图片等)或者更高维的数组(如彩色图片、视频等)。Tensor与NumPy的ndarrays类似,但Tensor可以使用GPU加速。
torch.Tensor()可以使用int类型的整数初始化矩阵的行、列数,torch.tensor()需要确切的数据值进行初始化
函数名后面带下划线_的函数称为inplace操作,会修改Tensor本身。例如,x.add_(y)和x.t_()会改变 x,x.add(y)和x.t()返回一个新的Tensor,x不变
- x.size()[1], x.size(1) # 查看列的个数, 这两种写法等价
- 注意:t.tensor()与tensor.clone()总是会进行数据拷贝,新的Tensor和原来的数据不再共享内存。如果需要共享内存,那么可以使用torch.from_numpy()或者tensor.detach()新建一个Tensor。
- 在维度变换中,可以使用view操作与reshape操作来改变Tensor的维度,二者之间有以下区别。
- view只能用于内存中连续存储的Tensor。如果Tensor使用了transpose、permute等维度交换操作,那么Tensor在内存中会变得不连续。此时不能直接使用view操作,应该先将其连续化,即tensor.contiguous.view()。
- reshape操作不要求Tensor在内存中是连续的,直接使用即可
t.tensor()与tensor.clone()总是会进行数据拷贝,新的Tensor和原来的数据不再共享内存。如果需要共享内存,那么可以使用torch.from_numpy()或者tensor.detach()新建一个Tensor