php科学计算库,科学计算库numpy基础
numpy
numpy的核心数据结构是ndarray,可以创建N维数组
ndarray的特点
ndarray(N-dimensional array):N维数组
一种由相同类型的元素组成的多维数组,元素数量是事先给定好的
元素的数据类型由dtype(data-type)对象来指定,每个ndarray只有一种dtype类型
ndarray的大小固定,创建好数组后数组大小是不会再发生改变
ndarray的创建
array函数:接收一个普通的python序列,并将其转换为ndarray
b = np.array([
[1,2,3],
[4,5,6]
])
print(b)
out:
[[1 2 3]
[4 5 6]]
zeros函数:创建指定长度或者形状的全零数组。
d = np.zeros((2,3))
print(d)
out:
[[ 0. 0. 0.]
[ 0. 0. 0.]]
ones函数:创建指定长度或者形状的全1数组。
e = np.ones((3,4))
print(e)
out:
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
empty函数:创建一个没有任何具体值的数组(准确地说是创建一些未初始化的ndarray多维数组)
f = np.empty((6,6))
print(f)
ndarray创建基本数据类型
image.png
image.png
code:
import numpy as np
a1 = np.array(["Python","Java","C++","PHP"])
print(a1)
a1
out:
['Python' 'Java' 'C++' 'PHP']
Out[81]:
array(['Python', 'Java', 'C++', 'PHP'], dtype='
code:
a2 = np.array(["哈哈","嘿嘿","呼呼","嘎嘎"])
print(a2)
a2
out:
[b'Python' b'Java' b'C++' b'PHP']
Out[83]:
array([b'Python', b'Java', b'C++', b'PHP'], dtype='|S8')
ndarray其它创建方式
arange函数: 类似python的range函数,通过指定开始值、终值和步长来创建一个一维数组(不包含终值)。
g = np.arange(10,50,5)
print(g) #输出:[10 15 20 25 30 35 40 45]
h = np.arange(30,20,-2)
print(h) #输出: [30 28 26 24 22]
linspace函数:通过指定开始值、终值和元素个数来创建一个一维数组,数组的数据元素符合等差数列,可以通过endpoint关键字指定是否包含终值,默认包含终值
i = np.linspace(0,25,6,endpoint = True)
print(i) #输出:[ 0. 5. 10. 15. 20. 25.]
logspace函数:和linspace函数类似,不过创建的是等比数列数组
j = np.logspace(2,3,5)
print(j) # 输出:[ 100. 177.827941 316.22776602 562.34132519 1000. ]
random函数:使用随机数填充数组,使用numpy.random中的random()函数来创建随机元素,数组包含的元素数量由参数决定
j = np.random.random((2,3,4))
print(j)
输出:
[[[ 0.67133713 0.80188756 0.06388015 0.81575917]
[ 0.21830916 0.90382401 0.0095 0.95252789]
[ 0.54048634 0.07984948 0.9527077 0.85444074]]
[[ 0.15047247 0.14771948 0.425606 0.02572186]
[ 0.71512809 0.81017573 0.80882504 0.87543752]
[ 0.75518265 0.73766281 0.93846421 0.31309056]]]
ndarray的属性
dtype:用于说明数组元素数据类型的对象
astype:用于对数组元素数据类型进行转换
shape:数组的各个维度大小的元组,即数组的形状
size:元素总个数,即shape中各个数的相乘
ndim:数组的维度数量
c= np.array([
[
[1,4,7],[2,5,8]
],
[
[3,6,9],[6,6,6]
]
])
print(c)
输出:
[[[1 4 7]
[2 5 8]]
[[3 6 9]
[6 6 6]]]
print(c.ndim) # 数组的纬度数为:3
print(c.dtype) # 数组元素数据类型为:int32
print(c.shape) # 数组各个纬度的大小:(2, 2, 3)
print(c.size) # 数组的元素个数:12
d= c.astype(float)
print(d.dtype) #数组元素数据类型为:float64
ndarray修改数组结构
对于一个已经存在的ndarray数组对象而言,可以通过调用修改形状的方法从而改变数组的结构形状。
直接修改数组ndarray的shape值, 要求修改后乘积不变。
直接使用reshape函数创建一个改变尺寸的新数组,原数组的shape保持不变,但是新数组和原数组共享一个内存空间,修改数组中的值都会对另外一个产生影响,另外要求新数组的元素个数和原数组一致。
当指定某一个轴为-1的时候,表示将根据数组元素的数量自动计算该轴的长度值。
code:
b1 = np.arange(0,20,2)
print(b1)
print(b1.size)
print(b1.shape)
out:
[ 0 2 4 6 8 10 12 14 16 18]
10
(10,)
code:
b2 = b1.reshape(2,5)
print(b2)
out:
[[ 0 2 4 6 8]
[10 12 14 16 18]]
code
b3 = b1.reshape(-1,2)
print(b3)
b3[2][1] = 100
print(b1)
out:
[[ 0 2]
[ 4 6]
[ 8 10]
[12 14]
[16 18]]
[ 0 2 4 6 8 100 12 14 16 18]
code:
b2.shape = (1,10)
print(b2)
out:
[[ 0 2 4 6 8 100 12 14 16 18]]
NumPy的基本操作
ndarray多维数组的索引
c1 = np.array([
[
[5,2,4],
[3,8,2],
],
[
[6,0,4],
[0,1,6]
]
])
print(c1[1,0,2]) # out:4
print(c1[0][1][2]) # out:2
ndarray花式索引
code:
f1=np.arange(32).reshape((8,4))
print(f1)
out:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]
[16 17 18 19]
[20 21 22 23]
[24 25 26 27]
[28 29 30 31]]
code:
f2 = f1[[2,3,5]] #取第2,3,5行
print(f2)
out:
[[ 8 9 10 11]
[12 13 14 15]
[20 21 22 23]]
code:
f3 = f1[[2,3,5],[1,2,3]] #分别取第2,3,5行中第1,2,3个元素
print(f3) #out: [ 9 14 23]
code:
f4 = f1[np.ix_([2,3,5],[1,2,3])] #分别取第2,3,5行中第1,2,3列
#f4 = f1[[2,3,5]][:,[1,2,3]]
print(f4)
out:
[[ 9 10 11]
[13 14 15]
[21 22 23]]
ndarray数组的切片
通过切片获得的新数组只是原数组的一个视图,当改变新数组中的数值时,原数组跟着改变。
ndarray数组的切片同Python中的切片
ndarray布尔类型索引
code:
d1 = np.arange(0,12,1)
d1.shape = (3,4)
print(d1)
out:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
code:
d2 = d1 < 6
print(d2)
out:
[[ True True True True]
[ True True False False]
[False False False False]]
code:
print(d1[d2])
# print(d1[d1<6])
out:
[0 1 2 3 4 5]
code:
names=np.array(['Gerry','Tom','John'])
scores=np.array([
[98,87,76,65],
[45,45,66,90],
[87,76,67,91]
])
classs=np.array([u'语文',u'数学',u'英语',u'体育'])
e1 = names=='Gerry'
print(e1) # [ True False False]
print(scores[e1].reshape((-1))) #[98 87 76 65]
print(scores[(names=='Gerry')|(names=='Tom')])
out:
[[98 87 76 65]
[45 45 66 90]]
ndarray数组与标量、数组之间的运算
数组不用循环即可对每个元素执行批量的算术运算操作,这个过程叫做矢量化,即用数组表达式代替循环的做法。矢量化数组运算性能比纯Python方式快上一两个数据级。
大小相等的两个数组之间的任何算术运算都会将其运算应用到元素级上的操作,在NumPy中,大小相等的数组之间的运算,为元素级运算,即只用于位置相同的元素之间,所得的运算结果组成一个新的数组,运算结果的位置跟操作数位置相同。
ndarray数组的矩阵积
image.png
矩阵:多维数组即矩阵
矩阵C = 矩阵A*矩阵B(矩阵A的列数必须等于矩阵B的行数时,A和B才可以相乘)
code
arr1 = np.array([
[5,2,4],
[3,8,2],
[6,0,4],
[0,1,6]
])
arr2 = np.array([
[2,4],
[1,3],
[3,2]
])
arr = arr1.dot(arr2)
print(arr)
out
[[24 34]
[20 40]
[24 32]
[19 15]]
ndarray数组转置与轴对换
数组转置是指将shape进行重置操作,并将其值重置为原始shape元组的倒置,比如原始的shape值为:(2,3,4),那么转置后的新元组的shape的值为: (4,3,2)
对于二维数组而言(矩阵)数组的转置其实就是矩阵的转置可以通过调用数组的transpose函数或者T属性进行数组转置操作
code:
g1 = np.arange(12).reshape((3,4))
print(g1)
print(g1.shape)
out:
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
(3, 4)
code:
g2 = g1.transpose()
print(g2)
print(g2.shape)
out:
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
(4, 3)
code:
g3 = g1.T
print(g3)
print(g3.shape)
out:
[[ 0 4 8]
[ 1 5 9]
[ 2 6 10]
[ 3 7 11]]
(4, 3)
常用函数
常用一元函数
image.png
image.png
常用二元函数
image.png
聚合函数
聚合函数是对一组值(eg.一个数组)进行操作,返回一个单一值作为结果的函数。当然聚合函数也可以指定对某个具体的轴进行数据聚合操作;常将的聚合操作有:平均值、最大值、最小值、方差等等
i1 = np.array([
[1,2,3,4],
[5,6,7,8],
[9,0,-2,-4]
])
print(i1)
print(np.max(i1)) #最大值
print(np.min(i1)) #最小值
print(np.mean(i1)) #平均值
print(np.std(i1)) # 标准差
print(np.var(i1)) #方差
print(np.max(i1,axis=1)) #axis = 1表示对行数据进行操作
print(np.mean(i1,axis=0)) #axis = 0表示对列数据进行操作
print(np.sum(i1,axis=1)) # 对行求和
where函数
where函数是三元表达式x if condition else y的矢量化版本
j1 = np.array([1.1,1.2,1.3,1.4])
j2 = np.array([2.1,2.2,0.3,2.4])
condition = j1
result1 = [x if c else y for(x,y,c) in zip(j1,j2,condition)]
print(result1) # [1.1000000000000001, 1.2, 1.3, 1.3999999999999999]
print(condition)
#condition为True获取j1中的内容,为false获取j2中的内容
result2 = np.where(condition,j1,j2)
print(result2)
out:
[ 1.1 1.2 0.3 1.4]
[ True True False True]
[ 1.1 1.2 0.3 1.4]
unique函数
将数组中的元素进行去重操作
k1 = np.array(["a","b","c","e","b","c"])
k2 = np.unique(k1)
print(k2) #['a' 'b' 'c' 'e']
random、randn、rand的区别
numpy.random.random(name,A)
这个可以改你要的随机数是什么分布,可以调整随机数的参数,例如正态分布可以改两个参数
numpy.random.randn(d0, d1, …, dn)
从标准正态分布中返回一个或多个样本值。
numpy.random.rand(d0, d1, …, dn)
均匀分布随机样本位于[0, 1)中。
php科学计算库,科学计算库numpy基础相关推荐
- python向量计算库教程_python中numpy基础学习及进行数组和矢量计算
前言 在python 中有时候我们用数组操作数据可以极大的提升数据的处理效率,类似于R的向量化操作,是的数据的操作趋于简单化,在python 中是使用numpy模块可以进行数组和矢量计算. 下面来看下 ...
- matlab将常值函数转换为变量,MATLAB与科学计算期末复习题题库15.11.12
MATLAB 与科学计算期末复习题题库(第一部分) 一.填空 1.MATLAB 的主界面是一个高度集成的工作环境,有四个不同职责分工的窗口,分别 为 . . .和 窗口. 2.MATLAB 的值,应在 ...
- python科学计算笔记(一)NumPy中ndarray对象、ufunc运算、矩阵运算
标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针.这样为了保存一个简单的[1,2,3],需要有3个指针和三个 ...
- 数据科学 | Python数据科学常用库
Python 在解决数据科学任务和挑战方面继续处于领先地位. 目录 核心库 IPython NumPy SciPy Pandas StatsModels 可视化 Matplotlib Seaborn ...
- 不是python中用于开发用户界面的第三方库-Python计算生态习题(50题)
1.Python网络爬虫方向的第三方库是 A. request B. jieba C.itchat D.time 答案:A 2.Python网络爬虫方向的第三方库是 A.numpy B.scrapy ...
- python编写程序公式计算s_python pandas库和stats库计算偏度和峰度(附程序)
pandas库 样本方差无偏估计: \(\frac{1}{n-1}\sum_{i=1}^{n}\left(x_i-\bar{x}\right)^2\) 偏度无偏估计: \(g_1=\frac{k_3} ...
- Python快速编程入门#学习笔记02# |第十章 :Python计算生态与常用库(附.小猴子接香蕉、双人乒乓球小游戏源码)
全文目录 学习目标 1. Python计算生态概述 1.1 Python计算生态概述 2. Python生态库的构建与发布 2.1 模块的构建与使用 * 2.1.1第三方库/模块导入的格式 2.2 包 ...
- 基于python计算生态的第三方库总结与介绍
摘要:Python语言有超过12万个第三方库,覆盖信息技术几乎所有领域.即使在每个方向,也会有大量的专业人员开发多个第三方库来给出具体设计.正是因为python有了这么多"隐形的翅膀&quo ...
- 量子计算时代更近了,未来可解决大规模计算的科学难题
来源:人民日报 摘要:借助量子计算的并行性带来指数级的加速,将能远远超越现有经典计算机的速度.当量子计算时代到来时,利用GHz时钟频率的量子计算机求解一个亿亿亿变量的线性方程组,将只需要10秒钟. 5 ...
- 127_Power PivotPower BI DAX计算订单商品在库时间(延伸订单仓储费用)
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 前面已经写过一个先进先出的库龄案例,在业务发生又有这样一个需求:先进先出前提,需要按照订单计算每个商品在库时间, ...
最新文章
- python好用-Pyzo -- 好用的 Python 轻量级 IDE
- 同步通信和异步通信的区别
- 高等数学下-赵立军-北京大学出版社-题解-练习9.2
- 程序员第一定律:关于技能与收入
- 一文带你入门目前大热的图神经网络
- android java代码重启,如何在Android中重启服务?
- python的核心理念是什么_Python 面向对象编程的核心概念知识点简介
- 大数据技术全解之曹冲称象与大数据思想
- 团队项目-个人博客-4.27
- 全中国加油:Github 开源了新型肺炎防疫项目,一起助力
- spring配置jackson不返回null值
- 人体姿态估计综述 2020最全
- 如何将MySQL卸载干净?
- SPSS-季节性分析
- 量子前沿英雄谱|激光界泰斗Robert Byer(罗伯特·拜尔)
- 中国的Palantir诞生,开启大数据关联挖掘的新时代
- USB 的UVC协议分析
- win10系统文件拖拽卡顿_终于找到Win10卡顿病根了!看完秒懂
- 天下无贼台词经典(收藏)
- OpenStack配置Cinder出现“You must set cylinders.You can do this from the extra functions menu.”解决办法
热门文章
- 作为一名 ABAP 资深顾问,下一步可以选择哪一门 SAP 技术作为主攻方向?
- 如何在SAP Spartacus里监控用户浏览了某产品明细页面的动作
- 在SAP UI5应用里使用jQuery.ajax读取数据并显示在页面上
- 深入学习SAP UI5框架代码系列之四:SAP UI5控件的元数据实现
- SAP Spartacus里如何查看HTTP请求的状态
- 如何在SAP云平台上启用SAP Intelligent Robotic Process Automation - IRPA
- 推荐一个去除图片人物背景的工具Removebg
- SAP ABAP CI/CD持续集成,持续交付解决方案
- SAP Fiori ButtonRenderer
- 解决minukube启动时因为未设代理导致的启动失败错误