【Numpy】Numpy基础练习全集

【Numpy】Numpy基础练习全集

参考网站

https://www.runoob.com/numpy/numpy-tutorial.html

个人练习完整代码

# NumPy练习
import numpy as np
# ---array---
# 一维数组
a = np.array([1, 2, 3])
print(a)
# 二维数组
a = np.array([[1, 2], [3, 4]])
print(a)
# ndmin指定生成的最小维度
a = np.array([1, 2, 3], ndmin=2)
print(a)
# ---dtype---
# dtype设置数据类型
a = np.array([1, 2, 3], dtype=complex)
print(a)
# 创建结构化数据类型
# int8, int16, int32, int64
# 四种数据类型可以使用字符串'i1', 'i2', 'i4', 'i8'代替
dt = np.dtype([('age', np.int8)])
print(dt)
# 将数据类型应用于ndarray对象
a = np.array([(10,), (20,), (30, )], dtype=dt)
print(a)
# 类型字段名可以用于存取实际的age列
print(a['age'])
# 存取student数据类型的数据
student = np.dtype([('name', 'S20'), ('age', 'i1'), ('marks', 'f4')])
a = np.array([('abc', 21, 50), ('xyz', 18, 75)], dtype=student)
print(a)
# ---ndim---
# ndim返回数组的维数
# 关于arange和reshape在后续有体现
a = np.arange(24)
print(a.ndim)
b = a.reshape(2, 4, 3)
print(b.ndim)
# ---shape---
# shape返回数组的维度
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape)
# 调整数组的大小
a.shape = (3, 2)
print(a)
# ---reshape---
# 用reshape调整数组大小
a = np.array([[1, 2, 3], [4, 5, 6]])
b = a.reshape(3, 2)
print(b)
# ---empty---
# 用empty()方法创建指定形状(shape)、数据类型(dtype)且未初始化的数组
x = np.empty([3, 2], dtype=int)
print(x)
# ---zeros---
# 创建指定大小的数组,数组元素以0来填充
y = np.zeros((2, 2), dtype=[('x', 'i4'), ('y', 'i4')])
print(y)
# ---ones---
# 创建指定大小的数组,数组元素以1来填充
y = np.ones((2, 2), dtype=[('x', 'i4'), ('y', 'i4')])
print(y)
# ---asarray---
# 从已有的数组创建数组
x = [1, 2, 3]
# 可接受任意形式的输入参数
# 列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组
a = np.asarray(x)
print(a)
# ---frombuffer---
# 实现动态数组
s = b'Hello World'
# buffer是字符串的时候
# Python3默认str是Unicode类型
# 所以要转成bytestring, 在原str前加上b
a = np.frombuffer(s, dtype='S1')
print(a)
# ---fromiter---
list = range(5)
it = iter(list)
# 使用迭代器创建ndarray
x = np.fromiter(it, dtype=float)
print(x)
# ---arange---
# 从数值范围创建数组
# start stop(不包含) step
x = np.arange(10, 20, 2)
print(x)
# ---linspace---
# 等差数列构建一维数组
# np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
a = np.linspace(1, 10, 10)
print(a)
# endpoint=False时不包含最终点
a = np.linspace(1, 10, 10, endpoint=False, retstep=True)
# retstep=True时,生成的结果显示间距
print(a)
# ---logspace---
# 等比数列构建一维数组
# np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
a = np.logspace(0, 9, 10, base=2)
print(a)
# ---slice---
# 从原数组切割出一个新数组
a = np.arange(10)
s = slice(2, 7, 2)
print(a[s])
# 切片操作 start:stop:step
b = a[2:7:2]
print(b)
# 冒号":"的解释
# 如果只放置一个参数如[2], 将返回与该索引相对应的单个元素
# 如果为[2:], 表示从该索引开始以后的所有项都将被提取
# 如果使用了两个参数, 如[2:7], 则提取两个索引(不包括停止索引)之间的项
# 多维数组同样适用上述索引提取方法
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
print(a[1:])
# 省略号"..."的解释
# 使选择元组的长度与数组的维度相同
# 显示第二列元素
# "..."选择所有行
# 1取每行第二个元素
print(a[..., 1])
# 显示第二行元素
# 1选择第二行
# "..."选择该行所有元素
print(a[1, ...])
# 同上 选择第二列及剩下的所有元素
print(a[..., 1:])
# NumPy高级索引
# 整数数组索引
# 获取数组中(0,0)、(1,1)和(2,0)位置处的元素
x = np.array([[1, 2],
             [3, 4],
             [5, 6]])
y = x[[0, 1, 2],
      [0, 1, 0]]
print(y)
# 获取数组四个角的元素
rows = np.array([[0, 0], [2, 2]])
cols = np.array([[0, 1], [0, 1]])
y = x[rows, cols]
print(y)
# 借助切片
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
# 取从第二行第二列开始的所有元素
b = a[1:, 1:]
print(b)
# 取从第二列开始的所有元素
c = a[..., 1:]
print(c)
# 布尔索引
print(a[a > 5])
# 使用~过滤NaN
a = np.array([np.nan, 1, 2, np.nan, 3])
print(a[~np.isnan(a)])
# 过滤非复数元素
a = np.array([1, 2+6j, 5, 3.5+5j])
print(a[np.iscomplex(a)])
# 花式索引
# 传入顺序索引数组
x = np.arange(32).reshape((8, 4))
print(x[[4, 2, 1, 7]])
# 传入倒序索引数组
print(x[[-4, -2, -1, -7]])
# ---np.ix_---
# 传入多个索引数组
print(x[np.ix_([1, 5, 7, 2], [0, 3, 1, 2])])
# 广播Broadcast
a = np.array([1, 2, 3, 4])
b = np.array([10, 20, 30, 40])
# 两数组形状相同 对应位相乘
c = a * b
print(c)
# 两数组形状不同
a = np.array([[0, 0, 0],
              [10, 10, 10],
              [20, 20, 20],
              [30, 30, 30]])
b = np.array([1, 2, 3])
# 重复b的各个维度
print(a + b)
# 等效于把数组b在二维上重复4再运算
# tile()函数将原矩阵横向、纵向地复制
bb = np.tile(b, (4, 1))
print(a + bb)
a = np.ones((2, 3))
aa = np.tile(1., (2, 3))
# a等效于aa
print(a)
print(aa)
# NumPy数组操作
# 修改数组形状
# ---reshape---
a = np.arange(8)
a = a.reshape((4, 2))
print(a)
# ---flat---
# 数组元素迭代器
for element in a.flat:
    print(element)
# ---flatten---
# 深拷贝数组
print(a.flatten())
# C style按行展开
print(a.flatten(order='C'))
# Fortran style按列展开
print(a.flatten(order='F'))
a.flatten()[1] = 999
# 不影响原来数组
print(a)
# ---ravel---
# 浅拷贝数组
print(a.ravel())
print(a.ravel(order='C'))
print(a.ravel(order='F'))
a.ravel()[1] = 999
# 影响原来数组
print(a)
# 翻转数组
# ---transpose---
# 对换数组的维度
a = np.arange(12).reshape(3, 4)
print(np.transpose(a))
# ---T---
# 转置数组 效果与transpose类似
print(a.T)
# ---rollaxis---
# 向后滚动特定的轴到一个特定的位置
# arr axis start
# 数组 要滚动的轴 要滚动到的位置(默认为0)
a = np.arange(8).reshape((2, 2, 2))
print(np.rollaxis(a, 2))
print(np.rollaxis(a, 2, 1))
# ---swapaxes---
# 交换数组的两个轴
# arr axis1 axis2
# 数组 对应第一个轴的整数 对应第二个轴的整数
print(np.swapaxes(a, 2, 0))
# 修改数组维度
# ---broadcast---
# 返回一个对象
# 该对象封装了将一个数组广播到另一个数组的结果
x = np.array([[1],
              [2],
              [3]])
y = np.array([4, 5, 6])
b =np.broadcast(x, y)
r, c = b.iters
print(next(r), next(c))
print(next(r), next(c))
print(x + y)
# ---squeeze---
# 从给定数组的形状中删除一维的条目
# 只能删除形状中的单维度条目
x = np.arange(9).reshape((1, 3, 3))
print(x)
print(x.shape)
y = np.squeeze(x)
print(y)
print(y.shape)
y = y.reshape((1, 9))
y = np.squeeze(y)
print(y)
print(y.shape)
# 数组元素的添加
# ---append---
# 在数组的末尾添加值
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
# 返回一维数组
print(np.append(a, [7, 8, 9]))
# 沿轴0添加元素
print(np.append(a, [[7, 8, 9]], axis=0))
# 沿轴1添加元素
print(np.append(a, [[5, 5, 5], [7, 8, 9]], axis=1))
# 插入值
# ---insert---
a = np.array([[1, 2], [3, 4], [5, 6]])
print(a)
# arr obj values axis
# 数组 插入位置 插入值 沿轴
print(np.insert(a, 3, [11, 12]))
# 沿轴0插入元素
print(np.insert(a, 3, [11, 12], axis=0))
# 数组元素的删除
# ---delete---
a = np.arange(12).reshape(3, 4)
print(a)
# 默认返回一维数组
print(np.delete(a, 5))
print(a)
# 删除第二行
print(np.delete(a, 1, axis=0))
# 删除第二列
print(np.delete(a, 1, axis=1))
# 删除切片选定元素
a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
print(np.delete(a, np.s_[::2]))
# 删除重复元素
a = np. array([5, 2, 6, 7, 5, 6, 8, 2, 9])
print(a)
# ---unique---
# 去重
u = np.unique(a)
print(u)
# 去重数组的索引数组
# 返回新列表元素在旧列表中的位置 并以列表形式存储
u, indices = np.unique(a, return_index=True)
print(indices)
# 返回旧列表元素在新列表中的位置 并以列表形式存储
u, indices = np.unique(a, return_inverse=True)
print(indices)
# 返回去重数组中的元素在原数组中的出现次数
u, indices = np.unique(a, return_counts=True)
print(indices)
# ---around---
a = np.array([1., 5.55, 123, 0.567, 25.532])
print(a)
# 返回指定数字的四舍五入值
print(np.around(a))
# decimal
# 舍入的小数位数 默认值为0
# 如果为负整数 将四舍五入到小数点左侧的位置
print(np.around(a, decimals=1))
print(np.around(a, decimals=-1))
# ---floor---
# 向下取整
a = np.array([-1.7, 1.5, -0.2, 0.6, 10])
print(a)
print(np.floor(a))
# 向上取整
print(np.ceil(a))
# 算数函数
a = np.arange(9).reshape(3, 3)
print(a)
b = np.array([10, 11, 12])
print(b)
# ---add---
print(np.add(a, b))
# ---subtract---
print(np.subtract(a, b))
# ---multiply---
print(np.multiply(a, b))
# ---divide---
print(np.divide(a, b))
# ---reciprocal---
# 取元素倒数
a = np.array([0.25, 1.33, 1, 100])
print(np.reciprocal(a))
# ---power---
# 幂
a = np.array([10, 100, 1000])
# 求二次方
print(np.power(a, 2))
# 求相应幂
print(np.power(a, [1, 2, 3]))
b = np.array([3, 2, 1])
print(np.power(a, b))
# ---mod---
# ---remainder---
# 相除取余
a = np.array([10, 20, 30])
b = np.array([3, 5, 7])
print(np.mod(a, b))
print(np.remainder(a, b))
# ---mean---
# 返回数组中元素的算数平均值
# 如果提供了轴 则沿轴计算
# 算术平均值是沿轴的元素的总和除以元素的数量
a = np.array([[1, 2, 3],
              [3, 4, 5],
              [4, 5, 6]])
print(a)
print(np.mean(a))
print(np.mean(a, axis=0))
print(np.mean(a, axis=1))
# ---average---
# 根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值
# 可以接受一个轴参数 如果没有指定轴 则数组会被展开
a = np.array([1, 2, 3, 4])
print(a)
print(np.average(a))
wts = np.array([4, 3, 2, 1])
print(np.average(a, weights=wts))
# returned返回权重的和
print(np.average(a, weights=wts, returned=True))
a = np.arange(6).reshape(3, 2)
print(a)
# 指定计算的轴
wt = np.array([3, 5])
print(np.average(a, axis=1, weights=wt))
# ---std---
# 标准差
print(np.std([1, 2, 3, 4]))
# ---var---
# 方差
print(np.var([1, 2, 3, 4]))

a = np.array([[3, 7, 5],
              [8, 4, 3],
              [2, 4, 9]])
print(a)
# ---amax---
# 计算数组中的元素沿指定轴的最大值
print(np.amax(a, axis=1))
# ---amin---
# 计算数组中的元素沿指定轴的最小值
print(np.amin(a, axis=1))
# ---ptp---
# 计算数组中元素最大值与最小值的差
print(np.ptp(a, axis=1))
# ---median---
# 计算数组中元素的中位数
print(np.median(a, axis=1))
# 三角函数
a = np.array([0, 30, 45, 60, 90])
# ---sin---
# 通过乘pi/180转化为弧度
print(np.sin(a*np.pi/180))
# ---cos---
print(np.cos(a*np.pi/180))
# ---tan---
print(np.tan(a*np.pi/180))
# ---arcsin---
# 反三角函数 其他类似
sin = np.sin(a*np.pi/180)
inv = np.arcsin(sin)
print(inv)
# ---degrees---
# 将弧度转换为角度
print(np.degrees(inv))
# ---nonzero---
# 返回输入数组中非零元素的索引
a = np.array([[30, 40, 0],
              [0, 20, 10],
              [50, 0, 60]])
print(a)
b = np.nonzero(a)
print(b)
# 使用这些索引来获取满足条件的元素
print(a[b])
# ---where---
# 返回输入数组中满足给定条件的元素的索引
b = np.where(a > 10)
print(b)
print(a[b])
# ---extract---
# 根据某个条件从数组中抽取元素 返回满条件的元素
x = np.arange(9).reshape(3, 3)
print(x)
# 定义选择条件
condition = np.mod(x, 2) == 0
print(condition)
print(np.extract(condition, x))
# 矩阵库Matrix
import numpy.matlib
# ---empty---
# 返回新矩阵 填充随机数据
print(np.matlib.empty((2, 2)))
# ---zeros---
# 填充为0
print(np.matlib.zeros((2, 2)))
# ---ones---
# 填充为1
print(np.matlib.ones((2, 2)))
# ---eye---
# 返回对角元素为1其他位置为0的矩阵
# n返回矩阵的行数 M返回矩阵的列数 k对角线的索引
print(np.matlib.eye(n=3, M=4, k=0, dtype=float))
# 返回给定大小的单位矩阵
# ---identity---
print(np.matlib.identity(5, dtype=float))
# ---rand---
# 返回给定大小矩阵 数据随机填充
print(np.matlib.rand(3, 3))
# ---matrix---
# 得到一个矩阵
i = np.matrix('1, 2; 3, 4')
print(i)
# ---asarray---
# 返回ndarray数组
j = np.asarray(i)
print(j)
# ---asmatrix---
# 返回矩阵
k = np.asmatrix(j)
print(k)
# ---dot---
# 两个数组的点积 即元素对应相乘
a = np.array([[1, 2],
              [3, 4]])
b = np.array([[11, 12],
              [13, 14]])
print(np.dot(a, b))
a = np.array([[1, 2],
              [3, 4]])
b = np.array([[11, 12],
              [13, 14]])
print(np.dot(a, b))
# ---matmul---
# 返回两个数组的矩阵乘积
# 二维数组时与dot()作用相同都是计算矩阵乘法
# 如果大于二维
# 则将其视为存在于最后两个索引的矩阵的栈
# 并进行相应广播
print(np.matmul(a, b))
# ---linalg.det---
# 返回矩阵的行列式
a = np.array([[1, 2],
              [3, 4]])
print(np.linalg.det(a))
# ---linalg.inv---
# 返回矩阵的乘法逆矩阵
x = np.array([[1, 2],
              [3, 4]])
y = np.linalg.inv(x)
print(x)
print(y)
print(np.dot(x, y))
# ---linalg.solve---
# 解线性方程
# x + y + z = 6
# 2y + 5z = -4
# 2x + 5y - z = 27
a = np.array([[1, 1, 1],
              [0, 2, 5],
              [2, 5, -1]])
b = np.array([[6],
              [-4],
              [27]])
x = np.linalg.solve(a, b)
print(x)
# AX = B
# A^(-1)AX = A^(-1)B
# X = A^(-1)B
print(np.dot(np.linalg.inv(a), b))
# ---inner---
# 返回向量内积
a = np.array([[1, 2],
              [3, 4]])
b = np.array([[11, 12],
              [13, 14]])
print(np.inner(a, b))
# 1*11+2*12, 1*13+2*14
# 3*11+4*12, 3*13+4*14
# ---vdot---
# 返回向量点积
# 1*11+2*12+3*13+4*14
print(np.vdot(a, b))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值