当前位置: 首页 > news >正文

做网站 是不是懂ps/天津关键词优化专家

做网站 是不是懂ps,天津关键词优化专家,用什么可以做网站,宁波网站建设公司费用价格相关链接官方API:Numpy基本概念import numpy as np,是 Numpy 库约定的导入方式。ndarray 类型是 Numpy 最主要的类型。ndarray 对象的元素具有相同的类型,并且一般是 Numpy 自定义的一些类型(常用就几种,float64&#…

1b31f3f0e1ee0154d2986d519f24b6eb.png

相关链接

  • 官方API:Numpy

基本概念

  • import numpy as np,是 Numpy 库约定的导入方式。
  • ndarray 类型是 Numpy 最主要的类型。
  • ndarray 对象的元素具有相同的类型,并且一般是 Numpy 自定义的一些类型(常用就几种,float64int64bool)。
  • ndarray 对象的元素的类型也可以不相同,但这会降低性能。
  • 如果创建 ndarray 对象时,不指定元素的类型,那么会自动判断。

注意

广播机制

假设 X 是个 2 * 5的矩阵,b 是个长度为 2 的列向量(shape=(2, 1)),以线性代数来说,它们是无法相加的,但在 numpy 中可以,numpy 会自动将 X 的每一列加上 b,相等于 X 加上了 5 个 b 组成的矩阵,这就是 numpy 的广播机制。

向量陷阱

创建两个随机数组:

a = np.random.randn(3)
b = np.random.randn(1, 3)  # 指定行数为 1,这样变成了二维数组

它们的值分别为:

[-0.83225206 -0.09399222 -1.67005094]    # 一对 [],秩为 1,不是向量,是一维数组
[[ 0.76575103 -0.74501314 -0.64075695]]  # 两对 [],是向量,或者说二维数组

分别打印它们的 shape,结果为:

(3,)    # 一维数组
(3, 1)  # 二维数组

numpy 中表示一个向量,需要用二维数组,因为列向量,必须用二维数组表示。但用一维数据创建数组时,默认会用一维数组表示,我们需要用向量表示这些数据时,就必须 reshape 成二维的,或者使用 np.atleast_2d() 函数。

选取多个元素时,会用一维数组类型。同样的,函数输出一维数据时,会用一维数组类型,为了表示向量,可以指定参数 keepdims=True,如 np.sum(b, axis=0, keepdims=True),来保留输出数组维度(这样二维数组输入数据,输出时就还是二维)。

因为本质是不同维度的数组,所以它们的在做某些运算时,行为是有很大不同的。例如 a.T @ a,结果是一个常数。而 b.T @ b 的结果为一个矩阵(就是线性代数中矩阵乘法的运算规则)。

浮点类型的大于 0 比较

浮点数是不精确的,虽然显示 0. ,但可能要比 0 大,或小,所以 numpy 矩阵 a 执行 a > 0 操作,有的 0. 会是 True,而有的会是 False

naninf

type(np.nan)                     # float
print(0 * np.nan)                # nan
print(np.nan - np.nan)           # nan
print(np.nan == np.nan)          # False
print(np.nan is np.nan)          # True
print(np.nan in set([np.nan]))   # Truetype(np.inf)                     # float
print(np.inf == np.inf)          # False
print(np.inf is np.inf)          # Trueprint(np.inf > np.nan)           # False
print(np.inf == np.nan)          # False
print(np.inf < np.nan)           # Falseprint(0.3 == 3 * 0.1)            # False,因为 0.1 并不精确

相关操作

创建 ndarray 对象

用列表,元组等创建:

# 根据传入的类型,自动判断 dtype
np.array([1, 2, 3, 4])
# 指定 dtype
np.array((1, 2, 3, 4), dtype=np.int16)
# 支持列表,元组混合
np.array([[1,2], [3,4], (0.5,0.6)])  # 三维数组

用 Numpy 中的函数创建:

# 类似 range,但返回 ndarray 类型
np.arange([start,] stop[, step,], dtype=None)
# 1 到 10 之间(包括 10),均匀选取 4 个数据(1, 4, 7, 10)
np.linspace(1, 10, 4)
# 此时不包括 10
np.linspace(1, 10, 4, endpoint=False)
# 根据 shape 生成全为 1 的数组,这里指定了数据类型
np.ones((3, 6), dtype=np.int32)
# 根据 shape 生成全为 0 的数组
np.zeros(3)
# 根据 shape 生成全为 10 的数组
np.full((3,3,3), 10)
# 创建一个 5*5 的单位矩阵,对角线为 1,其余为 0
np.eye(5)# 合并 a,b 两个数组,返回一个新数组
np.concatenate((a, b))# 生成和 x 相同 shape 的全 1 数组
np.ones_like(x)
# 生成和 x 相同 shape 的全 0 数组
np.zeros_like(x)
# 生成和 x 相同 shape 的全 3 数组
np.full_like(x, 3)

随机生成:

# 指定随机数种子,相同的随机数种子,生成相同的随机数
np.random.seed(10)# 生成服从标准正态的随机数,shape 为 (3, 4, 5),常用
np.random.randn(3, 4, 5)
# 生成 0 到 1 之间随机浮点数,shape 为 (3, 4, 5)
np.random.rand(3, 4, 5)
# 根据 shape 生成 x 到 y 之间随机整数
np.random.randint(x, y, shape)
# 产生具有正态分布的数组,loc 均值,scale 标准差,size 数量
np.random.normal(loc, scale, size)
# 产生具有均匀分布的数组,low 起始值,high 结束值,size 数量
np.random.uniform(low, high, size)
# 产生具有泊松分布的数组,lam 随机事件发生率,size 数量
np.random.poisson(lam, size)

ndarray 对象的重要属性

# 各个维度的长度,是个元组
a.shape
# 维度数,等同 `len(a.shape)`
a.ndim
# 所有维度的总元素数量,即所有维度相乘
a.size
# 元素的类型
a.dtype
# 元素类型占用大小
a.itemsize
# 所有数据占用的大小,字节为单位,等于 a.size*a.itemsize
a.nbytes

ndarray 对象与维度有关的操作

转置:

# 返回转置后的 a,非原地
a.T

数组维度的变换(考虑维度变换时,先把原数组变为一维的,再考虑变换维度):

# 转为 3 行 4 列的数组,非原地
a.reshape(3, 4)
# 转为 2 面 3 行 4 列的数组,非原地
a.reshape(2, 3, 4)
# -1 指根据数组元素个数自动分配
a.reshape(3, -1)
# 跟 .reshape() 功能一致,但属原地操作,注意不能用 -1 表示法
a.resize(3, 4)
# 将 1(0+1)维和 2(1+1)维交换,有点难理解,配合实例去理解
a.swapaxes(0, 1)# 降维成一维数组,非原地
a.flatten()
# 删除 a 中所有为 1 的维度
# 如 `array([[[1, 2, 3]]])` 使用后会变成 `array([1, 2, 3])`
a.squeeze()
# 保证数据至少 1 维,如输入一个数字,会输出一个包含它的一维数组
# 如果输入数组就不发生变化
# 可以输入多个变量,返回 tuple
np.atleast_1d(1)
# 同上,至少二维
np.atleast_2d(a)# 根据 shape 将一维下标 index 转换成多维下标
np.unravel_index(index, shape)

ndarray 对象的选取方式

对象在选取后也可进行修改。

假设 a 是一维的:

# 选取第 4 个元素
a[3]
# 完全支持切片操作
a[1:10:2]

假设 a 是二维的:

"""选取单个数据"""
a[0, 1]    # 选取第 1 行,第 2 个元素
a[0][1]    # 另一种选取方式,但不推荐,实测比上面慢 1 倍左右
a[-1, -1]  # 支持负索引"""选取多个数据"""
a[0]        # 选取第 1 行
a[:,0]      # 选取第 1 列
a[:,1:4]    # 选取 2 到 4 列
a[:,(0,2)]  # 选取第 1 和第 3 列,元组可以换成 list 或 ndarray 等类型

假设a是三维的:

"""选取单个数据"""
a[1, 2, 3]     # 选取第 2 面,第 3 行,第 4 个元素
a[1][2][3]     # 另一种选取方式,但不推荐,实测比上面慢 1 倍左右
a[-1, -2, -3]  # 支持负索引"""选取多个数据"""
a[:, -1, 3]   # 支持多维切片
a[:, 1:3, :]
a[:, :, ::2]
a[:,:,(0,2)]  # 选取所有面第 1 和第 3 列,元组可以换成 list 或 ndarray 等类型

无论a是几维的,布尔选取:

# 选取所有大于 10 的数据
a[a>10]
# 选取所有大于 10 小于 20 的数据
a[(a>10)&(a<20)]
# 选取所有小于等于 10 或大于等于 20 的数据
a[(a<=10)|(a>=20)]

用方法选取元素:

# 不指定参数,选取数组中唯一一个元素,需要所有维度为 1
# 如 `array([[[1]]])` 中的 1
a.item()
# 维度转为 1 维后,选取第 10 个元素
a.item(9)
# 选取 3 维第 2 号,2 维第 3 号,3 维第 4 号元素
a.item((1,2,3))

ndarray 对象的运算

# 两个数组各元素间加减乘除模指数运算
+   -   *   /   %   **
# 比较,产生布尔型数组
>   <   >=   <=   ==   !=

Numpy 重要统计函数

这些不仅是 numpy 的函数,也都是 ndarray 对象的方法。并且大部分都可以指定 axisaxis=0 指行,axis=1 指列。

# 返回 a 去重后的数组,类似 set()
np.unique(a)
# 返回数组 a 最大值
np.max(a)
# 返回数组 a 最小值
np.min(a)
# 返回数组 a 最大值的降成一维后的索引
np.argmax(a)
# 返回数组 a 最小值的降成一维后的索引
np.argmin(a)
# 返回 a 中最大值与最小值的差
np.ptp(a)
# 返回 a 中元素的中位数
np.median(a)
# 计算相关元素之和
np.sum(a)
# 计算相关元素的期望
np.mean(a)
# 计算相关元素的加权平均值
np.average(a, weights)
# 计算相关元素标准差
np.std(a)
# 计算相关元素方差
np.var(a)
# 以一维数组的形式返回矩阵的对角线(左上到右下)元素
np.diag(a)
# 计算对角线(左上到右下)元素的和,即迹
np.trace(a)
# 如果 a 中所有元素都为真,就返回 True,否则 False
np.all(a)
# 如果 a 中有任一元素都为真,就返回 True,否则 False
np.any(a)

Numpy 重要数学函数

一元:

# 求数组各元素的绝对值
np.abs(x)
# 求数组各元素的绝对值
np.fabs(x)
# 求数组各元素的平方根
np.sqrt(x)
# 求数组各元素的平方
np.square(x)
# 求数组各元素的自然对数
np.log(x)
# 求数组各元素的 2 底对数
np.log2(x)
# 求数组各元素的 10 底对数
np.log10(x)
# 求数组各元素的 ceiling 值
np.ceil(x)
# 求数组各元素的 floor 值
np.floor(x)
# 求数组各元素的四舍五入值
np.rint(x)
# 将数组各元素的整数和小数部分以两个独立数组形式返回
np.modf(x)
# 求数组各元素的 cos 值
np.cos(x)
# 求数组各元素的 sin 值
np.sin(x)
# 求数组各元素的 tan 值
np.tan(x)
# 求数组各元素的 e^n 值
np.exp(x)
# 求数组各元素的符号值,1(+),0,-1(-)
np.sign(x)
# 返回 a 中元素的梯度
np.gradient(a)

二元:

# 两个数组各元素进行比较,取大的那个,返回数组
# a,b 也可以是数字类型
np.maximum(a, b)
# 两个数组各元素进行比较,取小的那个,返回数组
# a,b 也可以是数字类型
np.minimum(a, b)
# 将 b 中各元素的符号赋值给 a 中各元素
np.copysign(a, b)

Numpy 重要随机函数

# 假设 a 为 2 维数组,将数组 a 的行重新随机排序,原地操作
np.random.shuffle(a)
# # 假设 a 为 2 维数组,将数组 a 的列重新随机排序,原地操作
np.random.shuffle(a.T)
# 根据数数字大小产生一个随机排列的一维数组,可做其他数组的随机索引
np.random.permutation(数字)
# 从数组 a 以概率 p 取元素,形成 size 大小的新数组,replace 表示是否可以重用元素,默认 False
np.random.choice(a[, size, replace, p])

Numpy 逻辑操作

# 逻辑与
np.logical_and(a)
# 逻辑或
np.logical_or(a)
# 逻辑异或
np.logical_xor(a)
# 逻辑非
np.logical_not(a)

Numpy 其他重要函数

# 当 condtiion 为真时返回 true_value,否则返回 false_value,返回一个新数组
np.where(condition, true_value, false_value)

数组元素类型的变换:

# 改变数组元素的类型,非原地
a.astype(np.int32)

数组转列表:

# 转成列表后就无法发挥 numpy 的性能优势了,非原地
a.tolist()

数组拷贝:

# 返回一个新数组,与 a 共用数据
a.view()
# 返回数组的深拷贝
a.copy()

把字节流转换为数组:

np.frombuffer(f.read(), dtype=np.int8, offset=8)  # offset 可以跳过头部几个字节

Numpy 与线性代数

# 矩阵乘法,等同 `A @ b`
np.dot(A, b)
# 计算行列式
np.linalg.det(A)
# 计算矩阵的特征值和特征向量
np.linalg.eig(A)
# 计算矩阵的逆
np.linalg.inv(A)
# 计算矩阵的 Moore-Penrose 伪逆
np.linalg.pinv(A)
# 计算 qr 分解
np.linalg.qr(A)
# 计算奇异值分解
np.linalg.svd(A)
# 解线性方程组 AX=b
np.linalg.solve(A, b)
# 计算 AX=b 的最小二乘解
np.linalg.lstsq(A, b)

数据存取相关

CSV 存取,只能存储一维和二维数据:

# 写入数据
np.savetxt('a.csv', a, fmt='%.1f', delimiter=',')
# 读取数据,默认 float
np.loadtxt('a.csv', dtype=np.float, delimiter=',')

另一种存储方式,能存储多维数据:

# 这种存储方式会丢失维度信息
b.tofile('b.dat', sep=',', format='%d')
# 需用 reshape 还原
np.fromfile('b.dat', dtype=np.int, sep=',').reshape(5, 10, 2)
# 不指定 sep 会生成二进制文件
b.tofile('b.dat', format='%d')
# 需用 reshape 还原
np.fromfile('b.dat', dtype=np.int).reshape(5, 10, 2)

Numpy 便捷文件存取,会保存维度,元素类型信息:

# 正常存储,默认 .npy 格式
np.save('b', b)
# 压缩存储,默认 .npz 格式
np.savez('b', b)
# 读取
np.load('b.npy')
http://www.lbrq.cn/news/1864981.html

相关文章:

  • 淘宝优惠网站如何做/seo公司是什么意思
  • 做网站需准备些什么问题/百度笔记排名优化
  • 沧州市做网站/吸引人的营销标题
  • 网站建设排名优化/小红书seo排名优化
  • 做系统哪个网站上的好/企业站seo外包
  • 公司网站建设小江/网盟推广
  • 如何制作h5页面视频/seo搜索优化 指数
  • 石家庄医院网站建设/seo综合查询软件排名
  • 做网站需要好多钱/如何去除痘痘效果好
  • 做淘宝的网站有哪些/seo入门课程
  • 自助网站制作/百度文库首页官网
  • 国内个人网站设计欣赏/现在怎么做网络推广
  • 做娱乐网站/百度品牌专区怎么收费
  • 给我一个可以在线观看的懂得/常德seo快速排名
  • 网站建设多少钱/哈尔滨百度网络推广
  • 销售易app官网下载/淘宝seo搜索排名优化
  • 重庆荣昌网站建设公司/游戏推广员好做吗
  • 德阳网站建设网站建设/搜索引擎优化seo公司
  • 电子商务网站建设资讯/搜索引擎优化 简历
  • 做外贸网站渠道/怎么推广公众号让人关注
  • 哈尔滨网站只做/怎么在百度上推广产品
  • 广东深圳区号/无排名优化
  • 空包网站建设/做网站建设的公司
  • 注册安全工程师含金量/肇庆seo按天计费
  • 全国政府网站管理系统/网站seo外包
  • 网站系统建设项目/appstore关键词优化
  • 网站备案认领/百度广告点击软件源码
  • 毕设 代做 网站/阿里域名购买网站
  • 大型网站 开发语言/培训机构营业执照如何办理
  • 装修建材网站模板/国产十大erp软件
  • Golang学习之常见开发陷阱完全手册
  • 16路串口光纤通信FPGA项目实现指南 - 第二部分(下)
  • 鸿蒙和Android知识点
  • 1.easypan-登录注册
  • 从零开始的云计算生活——第三十二天,四面楚歌,HAProxy负载均衡
  • HTML应用指南:利用GET请求获取河南省胖东来超市门店位置信息