史上最全Numpy模块操作

Numpy模块的常用操作,尤其涉及对矩阵的操作,这些 操作在后续程序中经常使用。Numpy封装了一个新的数据类型ndarray(N-dimensional Array),它是 一个多维数组对象。该对象封装了许多常用的数学运算函数,方便我们做数 据处理、数据分析等。

Numpy(Numerical Python的简称)的诞生弥补了这些不足。Numpy提 供了两种基本的对象:ndarray(N-dimensional Array Object)和 ufunc(Universal Function Object)。ndarray是存储单一数据类型的多维数 组,而ufunc则是能够对数组进行处理的函数。

import numpy as np

nd11 = np.random.random(10)
print(nd11)
print(type(nd11))

list2 = [[3, 4, 5, 6], [5, 7, 8, 11]]
nd12 = np.array(list2)
print(nd12)

nd13 = np.random.random([2, 2])
print(nd13)
print('nd13:', nd13.shape)

np.random.seed(123)
nd14 = np.random.randn(2, 3)
print(nd14)
np.random.shuffle(nd14)
print("随机打乱后数据:")
print(nd14)
print(type(nd14))

# 创建特定形状的多维数组
nd5 = np.zeros([3, 3])
nd6 = np.ones([3, 3])
nd7 = np.zeros_like(nd5)
nd8 = np.ones_like(nd6)
print(nd5)
print(nd6)
print(nd7)
print(nd8)
# 生成三阶对角矩阵
nd1 = np.eye(3)
nd2 = np.diag([1, 2, 3])
print(nd1)
print(nd2)

nd9 = np.random.randn(3, 3)
print(nd9)
nd10 = np.random.random([5, 5])
np.savetxt(X=nd10, fname='./test1.txt')
nd11 = np.loadtxt('./test1.txt')
print(nd11)

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

# 获取元素
nd21 = np.arange(10)
print(nd21[3])
print(nd21[3:6])
print(nd21[1:6:2])
print(nd21[::-2])

# 截取一个多维数组的一个区域内数据
nd22 = np.arange(25).reshape([5, 5])
var = nd22[2:3, 2:3]
print(var)
var1 = nd22[(nd22 > 3) & (nd22 < 10)]
print(var1)

from numpy import random as nr, float32

a = np.arange(1, 25, dtype=float32)
c1 = nr.choice(a, size=(3, 4))
c2 = nr.choice(a, size=(3, 4), replace=True)
c3 = nr.choice(a, size=(3, 4), p=a / np.sum(a))
print("随机可重复抽取")
print(c1)
print("随机但不重复抽取")
print(c2)
print("随机但按制度概率抽取")
print(c3)

# 对应元素相乘
A = np.array([[1, 2], [-1, 12]])
B = np.array([[4, 7], [3, 2]])
print(A * B)
print(np.multiply(A, B))

X = np.random.rand(2, 3)


def sigmoid(x):
    return 1 / (1 + np.exp(-x))


def relu(x):
    return np.maximum(0, x)


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


print("输入参数X的形状:", X.shape)
print("激活函数sigmoid输出形状:", sigmoid(X).shape)
print("激活函数relu输出形状:", relu(X).shape)
print("激活函数softmax输出形状:", softmax(X).shape)

# 点积运算
x1 = np.array([[1, 2], [3, 4]])
x2 = np.array([[2, 3, -1], [4, 5, 6]])
x3 = np.dot(x1, x2)
print(x3)

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

# 2.resize修改向量本身
arr = np.arange(10)
print(arr)
a1 = np.resize(5, 2)
print(a1)

# 3.向量转置
arr1 = np.arange(12).reshape(3, 4)
print(arr1.T)

# 4.向量展平
arr2 = np.arange(6).reshape(2, 3)
print(arr2)
# 按照列优先,展平
print("按照列优先,展平")
print(arr2.ravel('F'))
# 按照行优先,展平
print("按照行优先,展平")
print(arr2.ravel())

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

# 6.squeeze 降维
arr4 = np.arange(3).reshape(3, 1)
print(arr4.shape)
print(arr4.squeeze().shape)
arr5 = np.arange(6).reshape(3, 1, 2, 1)
print(arr5.shape)
print(arr5.squeeze().shape)

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

# 合并数组
a = np.array([1, 2, 3, 5, 6])
b = np.array([7, 9])
c = np.append(a, b)
print(c)

# 合并多维数组
a1 = np.arange(4).reshape(2, 2)
b1 = np.arange(4).reshape(2, 2)
# 按行合并
c1 = np.append(a1, b1, axis=0)
print('按行合并后的结果')
print(c1)
print('合并后数据维度', c1.shape)
# 按列合并
d1 = np.append(a1, b1, axis=1)
print('按列合并后的结果')
print(d1)
print('合并后数据维度', d1.shape)

# 2.stack
# 沿指定轴堆叠数组或矩阵
a2 = np.array([[1, 2], [3, 4]])
b2 = np.array([[5, 6], [7, 8]])
c2 = np.stack((a2, b2), axis=0)
print(c2)

# 3. concatenate
# 沿指定轴连接数组或矩阵
a3 = np.array([[1, 2], [3, 4]])
b3 = np.array([[5, 6]])
c3 = np.concatenate((a3, b3), axis=0)
print(c3)
d3 = np.concatenate((a3, b3.T), axis=1)
print(d3)

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

# 广播机制
A2 = np.arange(0, 40, 10).reshape(4, 1)
B2 = np.arange(0, 3)
print("A2矩阵的形状:{},B2矩阵的形状:{}".format(A2.shape, B2.shape))
C2 = A2 + B2
print("C2矩阵的形状:{}".format(C2.shape))
print(C2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值