ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

深度学习笔记(基于pytorch)——Numpy基础

2021-12-01 09:30:13  阅读:151  来源: 互联网

标签:arr shape 笔记 np pytorch 数组 print import Numpy


Numpy基础

数组变形

reshape

定义:重新将向量arr维度进行改变,不修改向量本身。即:不影响原地址下的内容,创建一个副本结果并输出。

import numpy as np

arr = np.arange(10)
print(arr)
# 将向量arrr维度变换为2行5列
print(arr.reshape(2, 5))
# 指定维度时可以只指定行数或列数,其他用-1代替
print(arr.reshape(5,-1))
print(arr.reshape(-1, 5))

输出结果
在这里插入图片描述

resize

定义:改变向量维度的同时修改向量本身,即:对原地址内容的修改。

import numpy as np
arr = np.arange(10)
print(arr)
# 将向量arr维度变换为2行5列
arr.resize(2, 5)
print(arr)

输出结果
在这里插入图片描述

T

定义:向量转置,不会对原地址的内容造成影响。

import numpy as np

arr = np.arange(12).reshape(3, 4)
# 向量arr为3行4列
print(arr)
# 将向量arr进行转置为4行3列
print(arr.T)

输出结果
在这里插入图片描述

ravel

定义:对原始向量展平,即将多维数组变成1维数组,不会对原地址下的内容作出修改。

import numpy as np

arr = np.arange(6).reshape(2, -1)
print(arr)
# 按照列优先,展平
print("按照列优先展平")
print(arr.ravel('F'))
# 按照行优先,展平
print("按照行优先展平")
print(arr.ravel())

输出结果
在这里插入图片描述

flatten

定义:对原始向量展平,即将多维数组变成1维数组,不会对原地址下的内容作出修改,但会返回原数组的副本。

import numpy as np
a = np.floor(10*np.random.random((3, 4)))
print(a)
print(a.flatten())

输出结果
在这里插入图片描述

squeeze

定义:这时一个主要用来降维的函数,把矩阵含1的维度去掉。

import numpy as np

arr = np.arange(3).reshape(3, 1)
print(arr.shape)
print(arr.squeeze().shape)
arr1 = np.arange(6).reshape([3, 1, 2, 1])
print(arr1.shape)
print(arr1.squeeze().shape)

输出结果
在这里插入图片描述

transpose

定义:对高维矩阵进行轴对称。

import numpy as np

arr2 = np.arange(24).reshape([2, 3, 4])
print(arr2.shape)
print(arr2.transpose(1, 2, 0).shape)

输出结果
在这里插入图片描述

合并数组

几点说明:
(1)append, concatenate 以及stack都有一个axis参数,用于控制数组的合并方式是按行还是按列。
(2)对于append, concatenate,待合并的数组必须有相同的行数或列数(满足一个即可)。
(3)stack要求待合并的数组必须具有相同的形状。

append

合并多维数组:

import numpy as np
a = np.arange(4).reshape(2, 2)
b = np.arange(4).reshape(2, 2)
# 按行合并
c = np.append(a, b, axis=0)
print('按行合并后的结果')
print(c)
print('合并后数据维度', c.shape)
# 按列合并
d = np.append(a, b, axis=1)
print('按列合并后的结果')
print(d)
print('合并后数据维度', d.shape)

输出结果
在这里插入图片描述

concatenate

沿指定轴连接数组或矩阵。

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])
c = np.concatenate((a, b), axis=0)
print(c)
d = np.concatenate((a, b.T), axis=1)
print(d)

输出结果
在这里插入图片描述

stack

沿指定轴堆叠数组或矩阵。

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print(np.stack((a, b), axis=0))

输出结果
在这里插入图片描述

批量处理

深度学习的计算一般比较复杂,并且数据量一般比较大,为了更加有效的计算,一般将整个数据集分批次处理。
如何把大数据拆分成多个批次呢?可采用以下步骤:
(1)得到数据集
(2)随机打乱数据
(3)定义批大小
(4)批处理数据集

import numpy as np

# 生成10000个形状为2*3的矩阵
data_train = np.random.randn(10000, 2, 3)
# 这是一个3维矩阵,第1个维度为样本数,后两个是数据形状
print(data_train.shape)
# 打乱这10000条数据
np.random.shuffle(data_train)
# 定义批量大小
batch_size=100
# 进行批处理
for i in range(0, len(data_traiin), batch_size):
	x_batch_sum=np.sum(data_train[i:i+batch_size])
	print('第{}批次,该批次的数据之和:{}'.format(i, x_batch_sum))

在这里插入图片描述

广播机制

调整数组使得shape一样,满足一定的规则:
(1)让所有输入数组都向其中shape最长的数组看齐,不足的部分则通过在前面加1补齐。
(2)输出数组的shape是输入数组shape的各个轴上的最大值。
(3)如果输入数组的某个轴和输出数组的对应轴的长度相同,或者某个轴的长度为1时,这个数组能被用来计算,否则出错。
(4)当输入数组的某个轴的长度为1时,沿着此轴运算时都用(或复制)此轴上的第一组值。
示例:

import numpy as np

A = np.arange(0, 40, 10).reshape(4, 1)
B = np.arange(0, 3)
print("A矩阵的形状:{},B矩阵的形状:{}".format(A.shape,B.shape))
C = A+B
print("C矩阵的形状:{}".format(C.shape))
print(C)

在这里插入图片描述

补充:random模块中choice函数的用法

import numpy as np
from numpy import random as nr

a = np.arange(1, 25, dtype=float)
c1 = nr.choice(a, size=(3, 4)) # size指定输出数组形状
c2 = nr.choice(a, size=(3, 4), replace=False)  # replace缺省为True,即可重复抽取
# 下式中参数p指定每个元素对应的抽取概率,缺省为每个元素被抽取的概率相同
c3 = nr.choice(a, size=(3, 4), p = a / np.sum(a))
print('随机可重复抽取')
print(c1)
print('随机但不重复抽取')
print(c2)
print('随机但按制度概率抽取')
print(c3)

在这里插入图片描述

参考文献

吴茂贵,郁明敏,杨本法,李涛,张粤磊. Python深度学习(基于Pytorch). 北京:机械工业出版社,2019.

标签:arr,shape,笔记,np,pytorch,数组,print,import,Numpy
来源: https://blog.csdn.net/weixin_45813658/article/details/121637791

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有