三维数组地址计算_科学计算NumPy
incipe
读完需要
20分钟
速读仅需 7 分钟
什么是 Numpy
❝
NumPy 是一个运行速度非常快的数学库,主要用于数组计算,包含:
- 一个强大的 N 维数组对象 ndarray
- 广播功能函数
- 整合 C/C++/Fortran 代码的工具
- 线性代数、傅里叶变换、随机数生成等功能
❞
使用
Ⅰ. 创建 ndarray
调用 array()
方法即可。
def array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
参数:
object
数组或嵌套的数列。dtype
数组元素的数据类型。copy
对象是否需要复制。order
创建数组的样式,,C 为行方向,F 为列方向,A 原顺序,K 元素在内存中的出现顺序。subok
默认返回一个与基类类型一致的数组。ndmin
指定生成数组的最小维度。
还可以使用:
numpy.arange(12) # 创建一个一维数组。`# array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])`
numpy.arange(12).reshape(3, 4) # 创建一个3行4列的数组。"""array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])"""
numpy.arange(12).reshape(2, 2, 3) # 创建一个三维数组"""array([[[ 0, 1, 2], [ 3, 4, 5]], [[ 6, 7, 8], [ 9, 10, 11]]])"""
怎么理解三维数组,简单的来说,我们把第一维看成数组分成了多少块,第二维就是每块有机房,第三维就是有几列。
Ⅱ. 查看数据类型
调用方法 dtype
即可。
t1 = np.arange(18).reshape(3, 3, 2)t1.detype"""dtype('int64')"""
更多数据类型请参考 numpy 中文网[1]
Ⅲ. 查看数组维度
调用 shape
方法即可。
import numpy as npt1 = np.array([[1, 2, 3], [4, 5, 6]])t1.shape# (2, 3)
shape
方法给我们返回一个元组。
调用 reshape()
方法改变数组形状。
t2 = t1.reshape(3, 2)"""array([[1, 2], [3, 4], [5, 6]])"""
调用 reshape()
方法后,原来的数组形状是不变的,返回值返回变形后的新数组。
把数组转化为一维数组。
t3 = t2.flatten()"""array([1, 2, 3, 4, 5, 6])"""
还可以用
t4 = t2.reshape(6,)"""array([1, 2, 3, 4, 5, 6])"""
或者
t5 = t2.reshape(t2.shape[0] * t2.shape[1], )"""array([1, 2, 3, 4, 5, 6])"""
因为 shape
方法返回一个 tuple
所以第一个是行,第二个是列,行 × 列就是数组总个数。
转换成二维,三维方法一样 t.reshape(2, 3)
把数组 t
转化为 2 行 3 列的数组。
Ⅳ. 数组的计算
数组与数字
数字和数组里面的每个数字相加、相减、相乘、相除。
t = np.array([[[1, 2, 3], [4, 5, 6], [7, 8, 9]]])t += 2"""array([[[ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]]])"""
注意,这里除 0,只会有警告,不会报错。
t = np.array([0, 1, 2])t /= 0# array([nan, inf, inf])
这里的 nan
是由 0 除 0 产生的,即 not a number
不是一个数字
这里的 inf
是由其它数字除 0 产生的,即 无穷的意思。
数组与数组
- 当数组形状一样的时候,加减乘除都是对应位置的元素进行计算。
t1 = np.arange(12).reshape(3, 4)t2 = np.arange(100, 112).reshape(3, 4)t1 + t2"""array([[100, 102, 104, 106], [108, 110, 112, 114], [116, 118, 120, 122]])"""
数组形状不一样时,如果两个数组的后缘维度(从后面开始算起的维度)的轴长度相符或其中一方长度为 1 时,是广播相容的。
比如,(3, 4)和 (4,)是可以计算的;(2, 3, 4)和(1, 3, 4)是可以计算的。
t1 = np.arange(12).reshape(3, 4)"""array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])"""t3 = np.arange(4)# array([0, 1, 2, 3])t1 + t3"""array([[ 0, 2, 4, 6], [ 4, 6, 8, 10], [ 8, 10, 12, 14]])"""
或者
t1 = np.arange(12).reshape(3, 4)"""array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]])"""t4 = np.arange(3).reshape(3, 1)"""array([[0], [1], [2]])"""t1 + t4"""array([[ 0, 1, 2, 3], [ 5, 6, 7, 8], [10, 11, 12, 13]])"""
Ⅴ. 读取数据
这个功能用的不多,因为 pandas
太强了。
import numpy as npnp.loadtxt(frame, dtype=float, comments='#', delimiter=None, converters=None, skiprows=0, usecols=None, unpack=False, ndmin=0, encoding='bytes', max_rows=None)
参数:
frame
文件,字符串或者产生器,一般是文件的绝对路径或者相对路径。dtype
数据类型、文件的字符串以什么数据类型读入数组中。comments
跳过文件中指定参数开头的行。delimiter
读取文件中数据的分隔符。converters
对读取的数据进行预处理。skiprows
选择跳过的行数,一般跳过第一行表头。uescols
指定需要读取的列。unpack
如果为 True,读入属性将分别写入不同数组变量,False 读入数据只写入一个数组变量。就是转置的意思。encoding
对读取文件进行预编码。max_rows
最大读取行数。
Ⅵ. 数组的转置
一维数组不需要转置。
二维数组转置
import numpy as npt1 = np.arange(24).reshape(4, 6)t2 = t1.T"""array([[ 0, 6, 12, 18], [ 1, 7, 13, 19], [ 2, 8, 14, 20], [ 3, 9, 15, 21], [ 4, 10, 16, 22], [ 5, 11, 17, 23]])"""t3 = t1.transpose()"""array([[ 0, 6, 12, 18], [ 1, 7, 13, 19], [ 2, 8, 14, 20], [ 3, 9, 15, 21], [ 4, 10, 16, 22], [ 5, 11, 17, 23]])"""
三维及三维以上。
t4 = np.arange(16).reshape(2, 2, 4)t4.transpose((1, 0, 2))"""array([[[ 0, 1, 2, 3], [ 8, 9, 10, 11]], [[ 4, 5, 6, 7], [12, 13, 14, 15]]])"""t4.swapaxes(1, 0)"""array([[[ 0, 1, 2, 3], [ 8, 9, 10, 11]], [[ 4, 5, 6, 7], [12, 13, 14, 15]]])"""
transpose()
接受一个元组,原来的轴是 (0, 1, 2)
通过 transpose()
方法把原来的 0
轴变成了 1
轴。
三维的数组的轴,就看成一个 xyz
坐标系即可。x
轴对应于 0
轴,y
轴对应于 1
轴,z
轴对应于 2
轴。
Ⅶ. numpy 索引和切片
取行
import numpy as npt = np.arange(24).reshape(4, 6)"""array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]])"""t[1] # t[1, :]"""array([0, 1, 2, 3, 4, 5])"""t[1::] # t[1::, :]"""array([[ 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]])"""t[[1, 3]] # t[[1, 3], :]"""array([[ 6, 7, 8, 9, 10, 11], [18, 19, 20, 21, 22, 23]])"""
取列
t[:,2]"""array([ 2, 8, 14, 20])"""# 取列[:,2]前面的:不能省略, 表示所有行都要t[:, 2::]"""array([[ 2, 3, 4, 5], [ 8, 9, 10, 11], [14, 15, 16, 17], [20, 21, 22, 23]])"""t[:, [1, 2, 3]]"""array([[ 1, 2, 3], [ 7, 8, 9], [13, 14, 15], [19, 20, 21]])"""
同时取行和列
t[2,3]# 15 表示取3行4列的元素t[1:3,2:5]"""array([[ 8, 9, 10], [14, 15, 16]])"""t[[0, 1, 2], [2, 3, 4]]"""array([ 2, 9, 16])"""
Ⅷ. 修改数组值
t 10"""array([[ True, True, True, True, True, True], [ True, True, True, True, False, False], [False, False, False, False, False, False], [False, False, False, False, False, False]])"""t[t 10] = 100"""array([[100, 100, 100, 100, 100, 100], [100, 100, 100, 100, 10, 11], [ 12, 13, 14, 15, 16, 17], [ 18, 19, 20, 21, 22, 23]])"""t = np.arange(24).reshape(4,6)"""array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]])"""np.where(t 10, 0, 100)"""array([[ 0, 0, 0, 0, 0, 0], [ 0, 0, 0, 0, 100, 100], [100, 100, 100, 100, 100, 100], [100, 100, 100, 100, 100, 100]])"""t = np.arange(24).reshape(4,6)t.clip(10, 18)"""array([[10, 10, 10, 10, 10, 10], [10, 10, 10, 10, 10, 11], [12, 13, 14, 15, 16, 17], [18, 18, 18, 18, 18, 18]])小于10的替换成10,大于18的替换为18,不能替换nan"""t = t.astype(float)"""array([[ 0., 1., 2., 3., 4., 5.], [ 6., 7., 8., 9., 10., 11.], [12., 13., 14., 15., 16., 17.], [18., 19., 20., 21., 22., 23.]])"""t[3, 3] = np.nan"""array([[ 0., 1., 2., 3., 4., 5.], [ 6., 7., 8., 9., 10., 11.], [12., 13., 14., 15., 16., 17.], [18., 19., 20., nan, 22., 23.]])"""t.clip(10, 18)"""array([[10., 10., 10., 10., 10., 10.], [10., 10., 10., 10., 10., 11.], [12., 13., 14., 15., 16., 17.], [18., 18., 18., nan, 18., 18.]])"""
Ⅸ. nan 特性
两个 nan
是不相等的。
np.nan == np.nan# False
根据这个特性,判断一个数组中有多少个 nan
t"""array([[ 0., 1., 2., 3., 4., 5.], [ 6., 7., 8., 9., 10., 11.], [12., 13., 14., 15., 16., 17.], [18., 19., 20., nan, 22., 23.]])"""np.count_nonzero(t!=t)# 1
判断一个数字是不是 nan
np.isnan(t[3, 3])# Truenp.isnan(t)"""array([[False, False, False, False, False, False], [False, False, False, False, False, False], [False, False, False, False, False, False], [False, False, False, True, False, False]])"""t[np.isnan(t)] = 0"""array([[ 0., 1., 2., 3., 4., 5.], [ 6., 7., 8., 9., 10., 11.], [12., 13., 14., 15., 16., 17.], [18., 19., 20., 0., 22., 23.]])"""
nan
与任何值计算都为 nan
t"""array([[ 0., 1., 2., 3., 4., 5.], [ 6., 7., 8., 9., 10., 11.], [12., 13., 14., 15., 16., 17.], [18., 19., 20., nan, 22., 23.]])"""t.sum() # np.sum(t)# nannp.sum(t, axis=0)"""array([36., 40., 44., nan, 52., 56.])"""
求和 np.sum()
方法里的参数 axis
表示轴的意思,一维数组一个轴,就是 0
二维数组两个轴 0, 1
三维数组三个轴 0, 1, 2
Ⅹ. numpy 中常用的统计函数
- 求和
np.sum(a, axis=None)
- 均值
np.mean(a, axis=None)
- 中值
np.median(a, axis=None)
- 最大值
np.max(a, axis=None)
- 最小值
np.min(a, axis=None)
- 极差
np.ptp(a, axis=None)
- 标准差
np.sed(a, axis=None)
标准差公式
这里都只列举的两个参数,更多参数作用可以参考源代码。
Ⅺ. 数组的拼接
竖直拼接
t1 = np.arange(24).reshape(4, 6)"""array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23]])"""t2 = np.arange(24, 48).reshape(4, 6)"""array([[24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34, 35], [36, 37, 38, 39, 40, 41], [42, 43, 44, 45, 46, 47]])"""np.vstack((t1, t2))"""array([[ 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, 32, 33, 34, 35], [36, 37, 38, 39, 40, 41], [42, 43, 44, 45, 46, 47]])"""
水平拼接
np.hstack((t1, t2))"""array([[ 0, 1, 2, 3, 4, 5, 24, 25, 26, 27, 28, 29], [ 6, 7, 8, 9, 10, 11, 30, 31, 32, 33, 34, 35], [12, 13, 14, 15, 16, 17, 36, 37, 38, 39, 40, 41], [18, 19, 20, 21, 22, 23, 42, 43, 44, 45, 46, 47]])"""
XII. 其他方法
- 获取最大最小值位置,
np.argmax(a, axis=None)
np.argmin(a, axis=None)
- 创建一个全为 0 的数组,
np.zeros((行, 列))
- 创建一个全为 1 的数组,
np.ones((行, 列))
- 创建一个对角线为 1 的正方形数组(方阵),
np.eys(3)
生成随机数
np.random.rand(d0, d1, d2, ... , dn)
n 维度均匀分布随机数组,范围0 ~ 1
np.random.randn(d0, d1, d2, ... , dn)
n 维度正态分布随机数组,平均数 0,标准差 1np.random.randint(low, high, (行, 列))
范围[low, high)
np.random.uniform(low, high, (行, 列)
浮点数np.random.normal(loc, scale, (行, 列))
指定正态分布抽取样本,分布中心loc
,标准差scale
np.random.seed()
随机种子,c/c++常用操作srand((unisgned)time(NULL))
Reference
[1]
numpy 中文网: https://www.numpy.org.cn/user/basics/types.html#数组类型之间的转换
- END -
三维数组地址计算_科学计算NumPy相关推荐
- python三维矩阵可视化_科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)...
Mlab了解 Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化. 过程为: .建立数据源 .使用Filter( ...
- python科学计算—— numpy
python科学计算-- numpy 1.模块导入 2. 数组的基本属性和操作 2.1 创建一维和二维数组 2.2 常用属性 2.3 调整数组的形状 2.4 将数组转化为list 2.5 numpy的 ...
- python三维数组可视化_【学习笔记】Python科学计算三维可视化(黄天羽、嵩天)(学习中。。)...
0 导学 目的:掌握利用三维效果表达科学和工程数据的能力 传播一种思想:可视化技术是数据之眼 内容组织: 流体数据的标量可视化.矢量可视化实例 三维扫描数据(模型/地形)可视化实例 三维地球场景可视化 ...
- python三维数组切片_【NumPy学习指南】day4 多维数组的切片和索引
ndarray支持在多维数组上的切片操作.为了方便起见,我们可以用一个省略号(...)来 表示遍历剩下的维度. (1)举例来说,我们先用arange函数创建一个数组并改变其维度,使之变成一个三维数组: ...
- python科学计算模块有什么_Python科学计算—numpy模块总结(1)
作为一个本科学数学专业,目前研究非线性物理领域的研究僧.用什么软件进行纯科学计算好,Fortran永远是第一位的:matlab虽然很强大,可以很容易的处理大量的大矩阵,但是求解我们的模型(有时可能是几 ...
- matlab中if语句多个_科学计算 | MATLAB程序设计基础
点击"蓝字"关注我们 科学计算 | MATLAB程序设计基础 引言 在前面的学习中,我们都是在命令行窗口逐条输入命令,然后由matlab解释执行,这种交互式的命令执行方式,操作简单 ...
- 三维数组地址计算_C语言进阶之路:数据类型 - 多维数组与指针!我的心中只有学习!...
1. 关于数组的首地址: 2. 数组其他元素的地址: 例子中, 数组的元素在内存中应该是这样排列的: [0][0] [0][1] [0][2] [1][0] [1][1] [1][2] 下面是通过指针 ...
- java 三维数组 魔方_三维数组的横向/纵向输出
哈哈,对于三维数组,可以想象成一个魔方(立方体). 这个立方体由每层->每层的每行->每层的每行的每列组成. 要实现三位数组横向/纵向的输出,需要遍历每个元素进行输出. 假设数组arrra ...
- scilab 求微分_科学计算自由软件SCILAB在常微分方程中的应用
0引言随着计算机技术的发展,计算机辅助分析已深入到诸多领域,包括数学的教学与研究.在常微分方程教学和研究中进行计算机辅助分析,就是一个值得探讨的问题.进行辅助分析必须使用计算软件,商品化的计算软件价格 ...
最新文章
- windows10远程控制 电脑,远程桌面
- Linux环境安装python3.6(APT方式)
- 【错误记录】Android 应用运行报错 ( java.lang.VerifyError: Verifier rejected class androidx. | 逆向中遇到的问题 )
- 阿里巴巴的云原生与开发者
- [BTS]使用BizTalk开发应用系统,就是这么简单!
- 优迈系统服务器初始化,优迈系统手机操作器服务器操作使用说明.pptx
- 【消息队列MQ】各类MQ比较
- dhcp 配置及排错
- 使用matlab读取excel数据并保存
- mysql 有伪表吗_DML和DQL 总结
- kx3552驱动最佳连线图_意甲新赛季5大看点:C罗连线苏牙,皮尔洛执教初体验
- ios苹果应用ipa一键签名工具_ios签名何以做到不越狱不上架也能安装ipa文件?
- SSR端口冲突的解决法法
- fckeditor for php 下载,FCKeditor(HTML在线编辑器)
- OpenCV创始人Gary Bradski,现已加入蓝胖子机器人
- 【Lesson 1】 和弦 Chord
- OpenCV~捕获摄像头 帧率fps和waitkey函数 问题
- C# 原子操作 Interlocked
- vue开发单页面应用
- 华为云桌面windows版客户端_华为云——云桌面,开启企业云办公时代
热门文章
- 可以给img元素设置背景图
- 15-奇怪的Js文件引用问题
- 清华镜像源地址_PyCharm安装第三方库(内含添加国内镜像源方法)
- 多个sheet拆分成多个文件_Pandas拆分DataFrame到多个文件中
- 脉冲宽度调制pdm_NHWYM脉冲硬质氧化电源-高压脉冲电源-双极性脉冲电源品牌-济南能华...
- 关于IC工程师的VIM实际工作技巧
- 大神们都在用的终端工具,多合一全能终端神器MobaXterm
- 【AI2】app inventor2离线开发环境百度网盘下载链接,安卓app图形化开发环境
- [Android工具]安卓百度云盘百度网盘资源搜索工具,安卓网盘搜索软件
- Systemd 入门及常用命令