科学计算库——numpy

这篇具有很好参考价值的文章主要介绍了科学计算库——numpy。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、概述

numpy作为高性能科学计算和数据分析的基础包,它是众多数据分析、机器学习等工具的基础架构,掌握numpy的功能及其用法将有助于后续其他数据分析工具的学习。本章将针对numpy库的基础功能进行详细地讲解。

二、数组对象

2.1 什么是数组对象

numpy中提供了一个重要的数据结构是ndarray(又称为array)对象,该对象是一个N维数组对象,可以存储相同类型、以多种形式组织的数据。
与Python中的数组相比,ndarray对象可以处理结构更复杂的数据。

数组指由相同类型的数据按有序的形式组织而成的一个集合,组成数组的各个数据称为数组的元素。

2.2 ndarray对象的常用属性

属性 说明
ndim 数组的维度
shape 数组中各维度的大小
size 数组元素的总数目
dtype 数组元素的类型
itemsize 数组中各元素的字节大小
  • ndim属性表示数组的维度。在numpy中,维度称为轴,轴的个数称为秩。
  • 一维数组只有一个轴,其内部的所有数据沿轴方向依次排列;二维数组的结构类似于表格,它一共有沿行方向和列方向的两个轴,其中沿行方向的轴对应编号为0的轴,沿列方向的轴对应编号为1的轴;三维数组的结构类似立方体,它一共有沿着长、宽、高方向的三个轴,这三个轴依次对应着编号为1、2、0的轴。
    科学计算库——numpy
  • shape属性表示数组的形状,也就是数组中各维度的大小,该属性的值为一个形如(行,列)的元组。
    科学计算库——numpy

2.3 numpy的常用数据类型

数据类型 说明
bool 布尔类型,值为True或False
int8、uint8 有符号和无符号的8位整数
int16、uint16 有符号和无符号的16位整数
int32、uint32 有符号和无符号的32位整数
int64、uint64 有符号和无符号的64位整数
float16 半精度浮点数(16位)
float32 半精度浮点数(32位)
float64 半精度浮点数(64位)
complex64 复数,分别用两个32位浮点数表示实部和虚部
complex128 复数,分别用两个64位浮点数表示实部和虚部

三、创建数组

3.1 根据现有数据类型创建数组

numpy中使用array()函数创建一个数组,该函数需要接收一个列表或元组。

  • 创建一维数组

科学计算库——numpy

  • 创建二维数组
    科学计算库——numpy
  • 创建三维数组
    科学计算库——numpy

3.2 根据指定数值创建数组

numpy中使用zeros()、ones()、empty()函数创建一个基于指定数值的数组,其中zeros()函数用于创建一个元素值都为0的数组;ones()函数用于创建一个元素值都为1的数组;empty()函数用于创建一个元素值都为随机数的数组。

语法格式:

zeros(shape, dtype=float, order='C')
ones(shape, dtype=None, order='C')
empty(shape,dtype=float,order='C'

shape:表示数组的形状。
dtype:(可选)表示数组中元素的类型,默认为float(浮点数)。
order:表示按索引顺序读取数组的元素,默认为’C’,说明采用C语言风格,按行排列数组的元素

  • 使用zero()函数创建数组
    科学计算库——numpy
  • 使用ones()函数创建数组
    科学计算库——numpy
  • 使用empty()函数创建数组
    科学计算库——numpy

3.3 根据指定数值范围创建数组

numpy中使用arange()函数创建一个基于指定区间均匀分布数值的数组,arange()函数的功能类似于Python中的range()函数,不同的是,arange()函数会返回一维数组而非列表。

# 创建一个元素位于[1,30)区间、元素值间隔为5的数组
array_demo = np.arange(1, 30, 5)
print(array_demo)

科学计算库——numpy

四、访问数组元素

数组支持通过索引和切片访问元素。numpy中提供了多种形式的索引:整数索引、花式索引和布尔索引,通过这些索引可以访问数组的单个、多个或一行元素。此外,还可以使用切片访问数组的元素。

  • 整数索引
  • 花式索引
  • 布尔索引

4.1 使用整数索引访问元素

numpy中可以使用整数索引访问数组,以获取该数组中的单个元素或一行元素
一维数组访问元素的方式与列表访问元素方式相似,它会根据指定的整数索引获取相应位置的元素。

import numpy as np
array_1d = np.arange(1, 7)    
print(array_1d)
# 获取索引为2的元素
print(array_1d[2])

科学计算库——numpy
当使用整数索引访问二维数组时,二维数组会根据索引获取相应位置的一行元素,并将该行元素以一维数组的形式进行返回

array_2d = np.arange(1, 7).reshape(2, 3)   
print(array_2d)
# 获取索引为1的一行元素
print(array_2d[1])

科学计算库——numpy
若想获取二维数组的单个元素,需要通过“二维数组[行索引,列索引]”形式实现。

# 获取行索引为1、列索引为2的元素
print(array_2d[1, 2])

科学计算库——numpy

4.2 使用花式索引访问元素

  • 什么是花式索引?

花式索引指以整数组成的数组或列表为索引。当使用花式索引访问一维数组时,会将花式索引对应的数组或列表的元素作为索引,依次根据各个索引获取对应位置的元素,并将这些元素以数组的形式进行返回;当使用花式索引访问二维数组时,会将花式索引对应的数组或列表的元素作为索引,依次根据各个索引获取对应位置的一行元素,并将这些行元素以数组的形式进行返回。

  • 使用花式索引访问一维数组
import numpy as np
array_1d = np.arange(1, 10)    
print(array_1d)
# 访问索引为[2,5,8]的元素
print(array_1d[[2, 5, 8]])

科学计算库——numpy

  • 使用花式索引访问二维数组

在使用两个花式索引,即通过“二维数组[花式索引,花式索引]”形式访问数组时,会将第一个花式索引对应列表的各元素作为行索引,将第二个花式索引对应列表的各元素作为列索引,再按照“二维数组[行索引,列索引]”的形式获取对应位置的元素。

array_2d = np.arange(1, 10).reshape((3, 3))    
print(array_2d)
# 访问索引为[0, 2]的元素
print(array_2d[[0, 2]])

科学计算库——numpy

# 使用两个花式索引访问元素
print(array_2d[[0, 2], [1, 1]])

科学计算库——numpy

4.3 使用布尔索引访问元素

  • 什么是布尔索引?

布尔索引指以布尔值组成的数组或列表为索引。当使用布尔索引访问数组时,会将布尔索引对应的数组或列表的元素作为索引,以获取索引为True时对应位置的元素。

array_2d = np.arange(1, 10).reshape((3, 3))    
print(array_2d)
# 使用布尔索引访问数组
print(array_2d > 5)
print(array_2d[array_2d > 5])

科学计算库——numpy

4.4 使用切片访问元素

  • 一维数组的切片操作
array_1d = np.array([10, 20, 30, 40, 50, 60])
print(array_1d[1:3])
print(array_1d[:3])
print(array_1d[:-1])
print(array_1d[:])
print(array_1d[::2])

科学计算库——numpy

  • 二维数组的切片操作

与一维数组相比,二维数组支持更多的切片操作,不仅可以向中括号内传入一个切片,还可以传入两个切片,甚至可以混合传入索引和切片

# 创建二维数组
arr_2d = np.array([[1, 2, 3], 
              [4, 5, 6], [7, 8, 9]])
print(arr_2d)

# 传入一个切片
# 使用切片访问前两行的元素
print(arr_2d[:2])

# 传入两个切片
# 使用切片访问前两行、第一列的元素
print(arr_2d[:2, 0:1])

# 混合传入整数索引与切片
# 使用切片访问前两行、第二列的元素
print(arr_2d[:2, 1])

科学计算库——numpy

五、数组运算

5.1 形状相同的数组间运算

无论是形状相同的数组,还是形状不同的数组,它们之间都可以执行算术运算。与Python列表不同,数组在参与算术运算时无需遍历每个元素,便可以对每个元素执行批量运算,效率更高。

形状相同的数组在执行算术运算时,会将位置相同的元素做算术运算,并将运算后所得的结果组成一个新数组
科学计算库——numpy

5.2 数组与常量的运算

形状相同的数组之间的任何算术运算都会应用到各元素,同样地,数组与标量执行算术运算时也会将标量应用到各元素,以方便各元素与标量直接进行相加、相减、相乘、相除等基础操作。

六、数组操作

6.1 排序

6.1.1 reshape()函数

reshape()函数的功能是改变数组形状,可以把x维数组改成y维数组。

array1=np. array([1,2,3,4])
print(array1)
array2=array1.reshape((2,2))
print(array2)

科学计算库——numpy

6.1.2 ravel()函数

ravel()函数的功能是将多维数组展开为一维数组。

array1=np. array([[1,2],[3,4]])
print(array1)
array2=array1.ravel()
print(array2)

科学计算库——numpy

6.1.3 concatenate()函数

concatenate()函数的功能是将多个数组连接。

# 语法格式
concatenate(arr,axis)
  • arr:拼接的数组,要求数组维数要一致。
  • axis:默认值是0,表示在第0个维度上拼接,也可以给其赋值,拼接在指定维度上 。
array1=np.array([[1,2],[3,4]])
array2=np.array([[5,6]]) 
array3=np.concatenate((array1,array2))
print(array3)
array4=np.concatenate((array1,array2.T),axis=1)
print(array4)

科学计算库——numpy

6.1.4 delete()函数

delete()函数的功能是从数组中删除指定值。

# 语法格式
delete(arr,obj,axis)
  • arr是需要处理的矩阵;

  • obj在什么位置处理;

  • axis是一个可选参数,axis=None,1,0。

    当axis=None时,arr会先按行展开,然后按照obj,删除第obj-1(从0开始)位置的数,返回一个行矩阵;当axis=0时,arr按行删除;当axis=1时,arr按列删除。

array1=np. array([[1,2],[3,4]])
array2=np. delete(array1,0)
print(array2)
array3=np. delete(array1,1,0)
print(array3)
array4=np. delete(array1,0,1)
print(array4)

科学计算库——numpy

6.1.5 sort()函数

sort()函数返回输入数组的排序结果。

# 语法格式
sort(axis=-1,kind=None,order=None)
  • axis:表示排序的轴编号,默认为-1,代表沿着末尾的轴排序。
  • kind:表示排序的算法,默认为’quicksort’(快速排序)。
  • order:表示按哪个字段排序。
array1=np.array([[1,5],[6,4]])
array2=np.sort(array1)
print(array2)
array3=np.sort(array1,axis=0)
print(array3)

科学计算库——numpy

6.1.6 where()函数

where()函数筛选出满足条件元素的下标。

# 语法格式
where(condition,x,y)
  • 满足条件condition,输出x,不满足输出y 。
  • 若没有x和y,则输出满足条件(即非0)元素的坐标。
array1=np.arange(10)
array2=np.where(array1,1,-1)
print(array2)
array3=np.where(array1>4)
print(array3)
array4=array1[array3]
print(array4)

科学计算库——numpy

6.1.7 extract()函数

extract()和where()函数有一点类似,不过extract()函数是筛选出满足条件元素的值并返回,而不是元素索引。

array1=np.arange(10)
x=np.mod(array1,3)==0
print(x)
array2=np.extract(x,array1)
print(array2)

科学计算库——numpy

七、数学运算

7.1 位运算

7.1.1 bitwise_and()函数

对数组中整数的二进制形式执行按位与运算。

# 语法格式
bitwise_and(a,b)
  • a和b为两个求位与运算的数字或数组
import numpy as np
array1 = np.arange(0,3)
array2 = np.arange(1,4)
np.bitwise_and(array1,array2)

科学计算库——numpy

7.1.2 invert()函数

对数组中整数进行按位取反运算,即0变成1,1变成0。

# 语法格式
invert(n)
  • n为按位取反运算的数字
np.invert(3)

科学计算库——numpy

7.1.3 left_shift()函数

将数组元素的二进制形式向左移动到指定位置,右侧附加相等数量的0。

# 语法格式
left_shift(a,b)
  • a为要左移的数字
  • b为要左移的位数
np.left_shift(1,1)

科学计算库——numpy

7.2 数学函数

三角函数:sin()、cos()、tan()
反三角函数:arcsin()、arccos()和arctan()
将弧度转换为角度:degrees()函数
科学计算库——numpy

7.3 舍入函数

7.3.1 around()函数

返回指定数字的四舍五入值

# 语法格式
around(array,decimals)
  • array表示数组
  • decimals表示舍入的小数位数,默认值为0,如果为负,整数将四舍五入到小数点左侧的位置。
    科学计算库——numpy

7.3.1 floor()函数&ceil()函数

floor()函数用于返回小于或者等于指定表达式的最大整数,即向下取整。

ceil()函数用于返回大于或者等于指定表达式的最小整数,即向上取整。

语法格式
floor(n); ceil(n)
  • n为要取整的数
    科学计算库——numpy

7.4 算术函数

add(),subtract(),multiply()和divide()是简单的加减乘除运算,也是基本的运算。

reciprocal()函数:返回参数元素的倒数。

mod()函数、remainder()函数:计算输入数组中相应元素的相除后的余数

7.4.1 power()函数

第一个输入数组中的元素作为底数,计算它与第二个输入数组中相应元素的幂。

# 语法格式
power(a,b)
  • a作为底数
  • b为幂值
    科学计算库——numpy

7.4 统计函数

7.4 1 amax()与amin()函数、ptp()函数

最大值amax()与最小值amin()函数:用于计算数组中的元素沿指定轴的最小大值和最小值。
ptp()函数:计算数组中元素最大值与最小值的差。

array1=np.arange(10)
np.amax(array1)
np.amin(array1)
np.ptp(array1)

科学计算库——numpy

7.4 2 percentile()函数

计算数组中的百分位数,百分位数是统计中使用的度量,表示小于这个值的观察值的百分比。

percentile(array,q,axis)
  • array是输入数组;
  • q是要计算的百分位数,在0~100之间;
  • axis是沿着它计算百分位数的轴
array1=np.arange(10)
np.percentile(array1,50)
np.percentile(np.arange(0,9),50)

科学计算库——numpy
科学计算库——numpy

7.4 3 median()函数

计算数组array中元素的中位数(中值)

array1=np.arange(10)
np.median(array1)

科学计算库——numpy

np.median(np.arange(1,9))

科学计算库——numpy

7.4 4 mean()函数

返回数组中元素的算术平均值。

如果提供了轴,则沿其计算。算术平均值是沿轴的元素的总和除以元素的数量。

np.mean(np.arange(1,9))

科学计算库——numpy

7.4 5 average()函数

根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值;该函数可以接受一个轴参数,如果没有指定轴,则数组会被展开。加权平均值即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数。

np.average(np.arange(70,89))

科学计算库——numpy

np.average(np.arange(1,9),weights=np.arange(0,8))

科学计算库——numpy

7.4 6 标准差std()函数与方差var()函数

标准差是一组数据平均值分散程度的一种度量,而统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数,其中,标准差是方差的平方根。

np.std(np.arange(1,9))

科学计算库——numpy

7.5 线性代数

函数 描述
dot() 两个数组的点积,即元素对应相乘
vdot() 两个向量的点积
inner() 两个数组的内积
matmul() 两个数组的矩阵积
determinant() 数组的行列式
solve() 求解线性矩阵方程
inv() 计算矩阵的乘法逆矩阵

7.5.1 dot()函数

对于两个一维的数组,计算的是这两个数组的乘法。

import numpy as np
a=np.array ([1,2,3,4])
b=np.array([1,2,3,4])
ans=np.dot (a, b)#1*1+2*2+3*3+4*4
print(ans)

a=np.array(([[1,2], [3,4]]) )
b=np.array(([[1,2,3], [4,5,6]]) )
aans=np.dot(a,b)#a.shape=(2,2),b.shape= (2,3),ans.shape(2,3) 即矩阵乘
print(aans)

科学计算库——numpy

7.5.2 vdot()函数

计算两个向量的点积。

import numpy as np
a=np.array([1,2,3,4])
b=np.array( [1,2,3,4])
ans=np. vdot (a, b) #1*1+2*2+3*3+4*4
print(ans)

科学计算库——numpy

7.5.3 linalg.det()函数

用于计算输入矩阵的行列式。

import numpy as np
a= np. array([[1,2], [3,4]])
ans = np.linalg. det (a) #1*4-2*3=-2
print(ans)

b= np.array([[6, 1, 1], [4,-2,5], [2,8,7]])
ans = np. linalg.det(b)
print(ans)
print(6*(-2*7-5*8)-1*(4*7 -5*2)+1*(4*8--2*2))

科学计算库——numpy

7.5.4 linalg.solve()函数

用于求矩阵形式的线性方程的解。

A=np.array([[2,2,2], [0,2,4], [2,5,-2]])
B=np.array([[5], [-3], [26]])
X=np. linalg. solve(A,B)#先传入A(系数矩阵),B(结果矩阵),返回解矩阵X
print("线性方程组的解:\n",X)

科学计算库——numpy文章来源地址https://www.toymoban.com/news/detail-422132.html

到了这里,关于科学计算库——numpy的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 高性能计算HPC笔记(一):概论

    学习自: B站北京大学Linux俱乐部:https://space.bilibili.com/3461562830424779 学习视频:北大未名超算队 高性能计算入门讲座(一):概论 这里PPT中有个问题:客户端只上传公钥给服务器,私钥是自己保留的。 概念 SISD:用一个线程去执行一条指令。 SIMD:使用单个instruction来操作多条

    2024年01月19日
    浏览(60)
  • 【高性能计算】opencl安装及相关概念

    异构计算是一种利用多种不同类型的计算资源来协同解决计算问题的方法。它的核心思想是将不同特性和能力的计算设备(例如CPU、GPU、FPGA等)组合在一起,以充分发挥它们在不同类型的工作负载和任务中的优势。 传统的计算模型通常依赖于单一类型的处理器,如中央处理

    2024年02月11日
    浏览(57)
  • 【高性能计算】监督学习之支持向量机分类实验

    叙述支持向量机算法的基本思想; 描述支持向量机算法的整个分类过程; 利用支持向量机对给定数据集进行分类识别; 对比支持向量机在不同参数设定下的分类性能; 对支持向量机算法的分类性能进行评估。        支持向量机(Support Vector Machine,简称SVM)是一种常见的机

    2024年02月10日
    浏览(64)
  • Intel oneAPI——让高性能计算触手可及

    在人工智能兴起的今天,大规模、高性能计算已成为社会发展的刚需。动辄千万节点规模的社交网络、交通网络,语言聊天模型中的大规模神经网络,以及航空航天等涉及大规模计算的场景,都少不了并行计算的支持。并行计算是一种一次可执行多个指令的算法,目的是提高

    2024年02月01日
    浏览(64)
  • 理解高性能网络技术对云计算的影响

    作者:禅与计算机程序设计艺术 云计算是一个新兴的服务形态,它通过将软件资源池化、软件定义网络以及基础设施即服务(IaaS)等多种形式的服务提供给消费者,将资源和服务的部署自动化,并按需付费的方式将服务运行起来。云计算服务的流行使得各种网络环境的用户都能

    2024年02月03日
    浏览(44)
  • 高性能计算技术在虚拟现实中的应用

    虚拟现实(VR,Virtual Reality)是一种使用计算机生成的3D环境来模拟现实世界的技术。它通过使用特殊的显示设备、数据传感器和软件来创建一个与现实环境相互作用的感觉。虚拟现实技术已经应用于许多领域,包括游戏、教育、医疗、军事等。 高性能计算(HPC,High Performance Co

    2024年04月08日
    浏览(54)
  • 【高性能计算】opencl语法及相关概念(三)事件,内存

    当谈到OpenCL中的事件时,它们代表了执行的各个阶段或操作的状态信息。通过使用事件,您可以跟踪和管理内核执行以及内存操作的进度和顺序。以下是与OpenCL事件相关的关键概念: 创建事件:您可以使用 clCreateUserEvent 或 clCreateUserEventWithProperties 函数手动创建事件,或者使

    2024年02月10日
    浏览(48)
  • 基于高性能计算环境的HPC算力编程模式

    摘要 【目的】 随着云计算、大数据、人工智能等技术的兴起和广泛应用,促进了基于多元算力的融合计算发展。在国家“东数西算”战略的指引下,充分发挥HPC算力优势,提供新型HPC算力编程模式,是新一代计算基础设施可编程能力的重要变革。 【方法】 分析了高性能计算环境

    2024年02月02日
    浏览(60)
  • 高性能云计算构架与实践7-nova安装配置

    1创建nova_api、nova、novacell0数据库,创建nova_api、nova、novacell0用户并授权,密码是123456.      2重启数据库 Systemctl restart mariadb 3创建nova用户,输入密码123456 添加admin角色到nova用户 openstack role add --project admin --user nova admin 创建服务实体 openstack service create --name nova --description \\\"O

    2023年04月10日
    浏览(47)
  • 高性能计算的矩阵乘法优化 - Python + OpenMP实现

    关于上一节读者某些疑问 :为什么你用进程并行不是线程并行? 回答 :由于Python解释器有GIL(全局解释器锁),在单进程的解释器上有线程安全锁,也就是说每次只能一个线程访问解释器,因此Python在语法上的多线程(multithreads)实现是不会提高并行性能的。 这一点和C

    2024年02月15日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包