Numpy常用操作整理

下列内容主要参考自《Python深度学习——基于Pytorch》(机械工业出版社),会随着学习加深持续更新。

import numpy as np

# 1.1 生成Numpy数组
# 1.1.1 从已有数据中创建数组
# 将列表转换成ndarray

lst1 = [[3.14, 2.17, 4], [0, 1, 2]]
nd1 = np.array(lst1)
print(nd1)
print(type(nd1))
print(nd1.shape)  # (2,3)
print(nd1.size)  # 6

# 1.1.2 利用random模块生成数组

# 设置浮点数种子
np.random.seed(4)

# 生成0-1的随机数
print(np.random.random(2))  # 得到的是一维数组
print(np.random.random((2, 3)))  # 得到的是2x3的数组

print(np.random.rand(2))  # 得到的是一维数组
print(np.random.rand(2, 3))  # 得到的是2x3的数组

# 生成均匀分布的随机数
print(np.random.uniform(2, 8, 2))  # 得到的是[2,8)的一维数组
print(np.random.uniform(2, 8, (3, 4)))  # 得到的是3x4的数组

# 生成标准正态分布的随机数
print(np.random.randn(3))  # 得到标准正态分布的一维数组
print(np.random.randn(3, 3))  # 得到3x3的标准正态分布的二维数组


# 随机打乱顺序
lst2 = [3.14, 2.17, 4, 0, 1, 2]
x = np.array(lst2)
np.random.shuffle(x)  # 对原ndarray进行打乱,本身没有返回值
print(x)

# 生成随机的浮点数
print(np.random.sample())  # 随机生成一个0-1的浮点数

# 1.1.3 创建特定形状的多维数组
a = np.array([[1, 2, 3], [4, 5, 6]])
print(np.zeros((3, 4)))  # 创建3x4的元素全为0的数组
print(np.ones((3, 4)))  # 创建3x4的元素全为1的数组
print(np.empty((3, 4)))  # 创建3x4的元素为垃圾值的数组
print(np.zeros_like(a))
print(np.ones_like(a))
print(np.empty_like(a))
print(np.eye(5))  # 5x5的对角线为1的方阵
print(np.full((3, 5), 666))  # 创建3x5的元素为666的数组
print(np.diag([1, 2, 3]))  # 三阶的对角矩阵

# 1.1.4 利用arange、linspace函数生成数组
print(np.arange(10))
print(np.arange(0, 10))
print(np.arange(1, 4, 0.5))
print(np.arange(9, 0, -1))

print(np.linspace(0, 1, 10))

# 1.2 获取元素

#  一维
nd1 = np.random.random(10)
print(nd1)
print(nd1[3])
print(nd1[3: 6])
print(nd1[1: 6: 2])
print(nd1[: : -2])

#  二维
nd2 = np.arange(25).reshape([5, 5])
print(nd2)
print(nd2[1:3, 1:3])

print(nd2[(nd2 > 3) & (nd2 < 10)])
print(nd2[[1, 2]])
print(nd2[1: 3, :])
print(nd2[:, 1: 3])

#  random.choice
a = np.arange(25)
print(np.random.choice(a, size=(3, 5)))
print(np.random.choice(a, size=(3, 5), replace=False))
print(np.random.choice(a, size=(3, 4), p=a/np.sum(a)))

# 1.3 Numpy的算术运算

# 1.3.1元素相乘
X = np.array([[1, 2], [-1, 4]])
Y = np.array([[2, 0], [3, 4]])
print(X*Y)
print(np.multiply(X, Y))

# 数组与标量相乘,或通过广播机制和数组中的每一个元素相乘
# 一些常用的操作可以通过广播机制实现
X = np.random.rand(2, 3)
print(X)
def relu(X):
    return np.maximum(0, X)

def softmax(X):
    return np.exp(X)/np.sum(np.exp(X))

# 1.3.2 点积运算
X1 = np.array([[1, 2, 3], [5, 6, 7]])
X2 = np.array([[1, 2], [3, 4], [5, 6]])
print(np.dot(X1, X2))

# 1.4 数组变形
# 1.4.1 更改数组形状

# reshape:在使用时暂时改变向量的维度,不改变向量本身
arr1 = np.arange(10)
print(arr1)
temp = arr1.reshape(2, 5)
print(temp)
temp[0] = -1  # 可以看到,如果对temp做一些操作,arr中的元素也是会跟着变化的
print(arr1)  #  arr是没有变换的

print(arr1.reshape(5, -1))  # 指定维度时可以只指定行数或列数,其他用-1代替
print(arr1.reshape(-1, 5))

# resize: 改变向量的维度(修改了向量本身)
arr2 = np.arange(10)
print(arr2)
arr2.resize(2, 5)
print(arr2)

# T: 向量转置
arr3 = np.arange(12).reshape(3, 4)
print(arr3)
temp = arr3.T
print(temp)
temp[0][0] = -1
print(temp)
print(arr3)  # 转置矩阵中的值变化,原矩阵中的值也会变化

# ravel: 向量展平
arr4 = np.arange(12).reshape(2, -1)
temp1 = arr4.ravel()
temp2 = arr4.ravel('F')  # 列优先
print(temp1)
print(temp2)
temp1[0] = -1
print(arr4)

# flatten: 把矩阵转换为向量
arr5 = np.floor(10*np.random.random((3, 4)))
print(arr5)
print(arr5.flatten())

# squeeze: 用于降维,如果某个维度只有一项,这个维度会被去掉
arr6 = np.arange(6).reshape(3,1,2,1)
print(arr6)
print(arr6.shape)
temp = arr6.squeeze()
print(temp)
print(temp.shape)
temp[0][0] = -1
print(arr6)

# transpose: 对高维矩阵进行轴对换
arr7 = np.arange(24).reshape(2, 3, 4)
print(arr7)
print(arr7.shape)
temp = arr7.transpose(1, 2, 0)
print(temp)
print(temp.shape)

# 1.4.2 合并数组
# append & concatenate

# 对于一维数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
c = np.append(a, b)
print(c)

# 对于二维数组
a = np.arange(4).reshape(2, 2)
b = np.arange(4).reshape(2, 2)
c = np.append(a, b, axis=0)
print(c)
d = np.append(a, b, axis=1)
print(d)

# concatenate和append使用方法一致,但内存占用更小
# 沿着哪个维度合并,恰恰不要求要拼接的两部分在这个维度上尺度一致,而除了这个维度之外的维度尺度必须一致
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值