目录
一、array类型" >一、array类型
1.1array类型的基本使用" >1.1array类型的基本使用
1.2对更高维度数据的处理" >1.2对更高维度数据的处理
1.3Numpy创建特殊类型的array类型" >1.3Numpy创建特殊类型的array类型
1.3.1生成全为0或全为1的array
1.3.2np.arrange()和np.linspace()
1.4Numpy基础计算演示" >1.4Numpy基础计算演示
二、线性代数相关 " >二、线性代数相关 
三、矩阵的高级函数-随机数矩阵" >三、矩阵的高级函数-随机数矩阵
首页 后端开发 Python教程 详细介绍python的numpy模块

详细介绍python的numpy模块

May 19, 2022 am 11:43 AM
python

本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于numpy模块的相关问题,Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展,下面一起来看一下,希望对大家有帮助。

详细介绍python的numpy模块

推荐学习:python视频教程

        Numpy是Numerical Python extensions的缩写,字面意思是Python数值计算扩展。Numpy是python中众多机器学习库的依赖,这些库通过Numpy实现基本的矩阵计算。

        Numpy支持高阶、大量计算的矩阵、向量计算,与此同时还提供了较为丰富的函数。此外,Numpy基于更加现代化的编程语言--python,python凭借着开源、免费、灵活性、简单易学、工程特性好等特点风靡技术圈,已经成为机器学习、数据分析等领域的主流编程语言。

一、array类型

        numpy的array类型是该库的一个基本数据类型,这个数据类型从字面上看是数组的意思,也就意味着它最关键的属性是元素与维度,我们可以用这个数据类型来实现多维数组。

        因此,通过这个数据类型,我们可以使用一维数组来表示向量,二维数组表示矩阵,并以此类推以用来表示更高维度的张量。

1.1array类型的基本使用

import numpy as np
# 通过np.array()方法创建一个名为array的array类型,参数是一个list
array = np.array([1, 2, 3, 4])
print(array)
# 结果为:[1 2 3 4]

# 获取array中元素的最大值
print(array.max())
# 结果为:4

# 获取array中元素的最小值
print(array.min())
# 结果为:1

# 获取array中元素的平均值
print(array.mean())
# 结果为:2.5

# 直接将array乘以2,python将每个元素都乘以2
print(array*2)
# 结果为:[2 4 6 8]

print(array+1)
# 结果为:[2 3 4 5]

print(array/2)
# 结果为:[0.5 1.  1.5 2. ]

# 将每一个元素都除以2,得到浮点数表示的结果
print(array % 2)
# 结果为:[1 0 1 0]

array_1 = np.array([1, 0, 2, 0])
# 获取该组数据中元素值最大的那个数据的首个索引,下标从0开始
print(array_1.argmax())
# 结果为:2

通过上面的代码,我们可以了解到Numpy中array类型的基本使用方法。

我们可以看到,array其实是一个类,通过传入一个list参数来实例化为一个对象,从而实现了对数据的封装。


1.2对更高维度数据的处理

import numpy as np
# 创建一个二维数组,用以表示一个3行2列的矩阵
array = np.array([[1, 2], [3, 4], [5, 6]])
print(array)

# 查看数据的维度属性,下面输出结果(3,2)表示3行2列
print(array.shape)
# 结果为:(3, 2)

# 查看元素个数
print(array.size)
# 结果为:6

# 查看元素最大值的索引
print(array.argmax())
# 结果为:5

# 将shape为(3,2)的array转换为一行表示
print(array.flatten())
# 结果为:[1 2 3 4 5 6]
# 我们可以看到,flatten()方法是将多维数据“压平”为一维数组的过程

#将array数据从shape为(3,2)的形式转为(2,3)的形式
print(array.reshape(2, 3))
'''结果为:
[[1 2 3]
 [4 5 6]]'''

#将array数据从shape为(3,2)的形式转为(1,6)的形式
print(array.reshape(1, 6))
# 结果为:[[1 2 3 4 5 6]]

高级一点的就是flatten()和reshape()函数了,需要注意下reshape()返回的结果是array类型


1.3Numpy创建特殊类型的array类型

1.3.1生成全为0或全为1的array

import numpy as np
# 生成所有元素为
array_zeros = np.zeros((2, 3, 3))
print(array_zeros)
'''结果为:
[[[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]

 [[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]]
'''
array_ones = np.ones((2, 3, 3))
print(array_ones)
'''结果为:
[[[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]

 [[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]]
'''
print(array_ones.shape)
# 结果为:(2, 3, 3)

注意:如果将(2,3,3)改为(3,3)

array_zeros = np.zeros((3, 3))
print(array_zeros)
'''结果为:
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
'''

其生成的是3行3列的array 


1.3.2np.arrange()和np.linspace()

arange([start,] stop[, step,], dtype=None, , like=None)

返回给定间隔内均匀分布的值。值在半开区间``[start, stop)``(换句话说,包括`start`但不包括`stop`的区间)内生成。对于整数参数,该函数等效于 Python 内置的 `range` 函数,但返回的是 ndarray 而不是列表。当使用非整数步长(例如 0.1)时,结果通常会不一致。对于这些情况,最好使用 `numpy.linspace`。

linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

在指定的时间间隔内返回均匀分布的数字。返回“num”个均匀分布的样本,在区间 [`start`, `stop`] 上计算。 

start:序列的起始值。

stop:序列的结束值,除非 `endpoint` 设置为 False。在这种情况下,序列由除最后一个“num + 1”个均匀分布的样本之外的所有样本组成,因此排除了“stop”。请注意,当 `endpoint` 为 False 时,步长会发生变化。

num=50:要生成的样本数。默认值为 50。必须为非负数。

endpoint=True:如果为真,`stop` 是最后一个样本。否则,不包括在内。默认为真。

retstep=False:如果为 True,则返回 (`samples`, `step`),其中 `step` 是样本之间的间距。

dtype=None:输出数组的类型。如果 `dtype` 没有给出,数据类型是从 `start` 和 `stop` 推断出来的。推断的 dtype 永远不会是整数;即使参数会产生一个整数数组,也会选择`float`。

因此以下代码就很容易理解了

# 生成一个array,从0递增到10,步长为1
array_arange = np.arange(10)
print(array_arange)
# 结果为:[0 1 2 3 4 5 6 7 8 9]

# 生成一个array,从0递增到10,步长为2
array_arange_1 = np.arange(0, 10, 2)
print(array_arange_1)
# 结果为:[0 2 4 6 8]

# 生成一个array,将0-10等分为5部分
array_linspace = np.linspace(0, 10, 5)
print(array_linspace)
# 结果为:[ 0.   2.5  5.   7.5 10. ]

1.4Numpy基础计算演示

import numpy as np
# 取绝对值
print(np.abs([1, -2, 3, -4]))
# [1 2 3 4]

# 求正弦值
print(np.sin(np.pi/2))
# 1.0

# 求反正切值
print(np.arctan(1))
# 0.7853981633974483

# 求e的2次方
print(np.exp(2))
# 7.38905609893065

# 求2的三次方
print(np.power(2, 3))
# 8

# 求向量[1,2]与[3,4]的点积
print(np.dot([1, 2], [3, 4]))
# 11

# 求开方
print(np.sqrt(4))
# 2.0

# 求和
print(np.sum([1, 2, 3, 4]))
# 10

# 求平均值
print(np.mean([1, 2, 3, 4]))
#2.5 

# 求标准差
print(np.std([1, 2, 3, 4]))
# 1.118033988749895

二、线性代数相关 

        前面我们已经了解到array类型及其基本操作方法,了解array类型可以表示向量、矩阵和多维张量。

        线性代数计算在科学计算领域中非常重要,因此接下来了解以下Numpy提供的线性代数操作

import numpy as np

vector_a = np.array([1, 2, 3])
vector_b = np.array([2, 3, 4])
# 定义两入向量vector_a与vector_b

m = np.dot(vector_a, vector_b)
# 将两个向量相乘,在这里也就是点乘,结果为20
print(m)

n = vector_a.dot(vector_b)
print(n)
# 将vector_a与vector_b相乘,结果为20
o = np.dot(vector_a, vector_b.T)
print(o)

'''
将一个行向量与一个列向量叉乘的结果相当于将两个行向量求点积,这里测试了dot()方法。其中array类型的T()方法表示转置。
测试结果表明:
dot()方法默认对两个向量求点积。对于符合叉乘格式的矩阵,自动进行又乘。'''

# 我们看一下下面这个例子:

matrix_a = np.array([[1, 2], [3, 4]])
# 定义一个2行2列的方阵

matrix_b = np.dot (matrix_a, matrix_a.T)
# 这里将该方阵与其转置叉乘,将结果赋予matrix_b变量
print(matrix_b)
'''结果为:
array([[5,11],
[11,25]])'''

p = np.linalg.norm([1, 2])
print(p)
# 求一个向量的范数的值,结果为2.2360679774997898
# 如果norm()方法没有指定第2个参数,则默认为求2范数

np.linalg.norm([1, -2], 1)
# 指定第2个参数值为1,即求1范数。我们在前面介绍过,1范数的结果为向量中各元素绝对值之和,结果为3.0

q = np.linalg.norm([1, 2, 3, 4], np. inf)
print(q)
# 求向量的无穷范数,其中np.inf表示正无穷,也就是向量中元素值最大的那个,其结果为4.0

r = np.linalg .norm([1, 2, 3, 4], -np.inf)
print(r)
# 同理,求负无穷范数的结果为1, 也就是向量中元素的最小值

# 求行列式
s = np.linalg.det(matrix_a)
print(s)
# -2.0000000000000004

t = np.trace(matrix_a)
print(t)
# 求矩阵matrix_a的迹,结果为5

u = np.linalg.matrix_rank(matrix_a)
# 求矩阵的秩,结果为2
print(u)

v = vector_a * vector_b
# 使用*符号将两个向量相乘,是将两个向量中的元素分别相乘,也就是我们所讲到的哈达马乘积
print(v)
# [ 2  6 12]

w = vector_a ** vector_b
print(w)
# 使用二元运算符**对两个向量进行操作,结果为array([1, 8, 81],dtype = int32)
# 表示将向量vector. a中元素对应vector. b中的元素值求幂运算。例如最终结果[1,8,81]可以表示为[1*1,2*2*2,3*3*3*3]

# 求逆矩阵
z = np.linalg.inv(matrix_a)
print(z)
'''
[[-2.   1. ]
 [ 1.5 -0.5]]'''

三、矩阵的高级函数-随机数矩阵

        Numpy除了为我们提供常规的数学计算函数和矩阵相关操作之外,还提供很多功能丰富的模块,随机数模块就是其中一部分。

        利用随机数模块可以生成随机数矩阵,比python自带的随机数模块功能还要强大。

import numpy as np
# 设置随机数种子
np.random.seed()

# 从[1,3)中生成一个整型的随机数,连续生成10个
a = np.random.randint(1, 3, 10)
print(a)
# [1 1 1 2 1 1 1 1 2 2]

# 若要连续产生[1,3}之间的浮点数,可以使用以下方法:
# ①
b = 2*np.random.random(10)+1
print(b)
'''
[2.88458839 2.07004167 2.80814156 1.83247535 2.33649809 2.62763357
 2.0549351  2.33464915 1.70562208 2.66257726]'''
# ②
c = np.random.uniform(1, 3, 10)
print(c)
'''
[1.76967412 1.37703868 2.48838004 1.45986254 2.04487418 2.51107658
 1.25673115 1.31416097 2.56218317 2.90575438]'''

# 生成一个满足正态分布(高斯分布)的矩阵,其维度是4*4
d = np. random.normal(size=(4, 4))
print(d)
'''
[[ 0.76164366  0.11588368  0.49221559 -0.28222691]
 [ 0.47638143 -0.21197541 -1.0776362   0.49241666]
 [ 0.26038756 -0.20406522  1.11210954 -1.191425  ]
 [ 0.58255677  1.84047863 -0.21366512 -0.85425828]]'''

# 随机产生10个n=5、p=0.5的二项分布数据:
e = np.random.binomial(n=5, p=0.5, size=10)
print(e)
# [1 1 5 2 1 2 1 2 1 2]

# 产生一个0到9的序列
data = np.arange(10)
print(data)
# [0 1 2 3 4 5 6 7 8 9]

# 从data数据中随机采集5个样本,采集过程是有放回的
f = np.random.choice(data, 5)
print(f)
# [1 7 3 3 4]

# 从data数据中随机采集5个样本,采集过程是没有放回的
g = np.random.choice(data, 5, replace=False)
print(g)
# [8 9 1 5 0]

# 对data进行乱序
h = np.random.permutation(data)
print(h)
# [8 5 3 9 2 0 4 6 1 7]

# 对data进行乱序,并替换为新的data
np.random.shuffle(data)
print(data)
# [9 7 0 3 8 5 2 1 4 6]

推荐学习:python视频教程

以上是详细介绍python的numpy模块的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Laravel 教程
1600
29
PHP教程
1502
276
PHP调用AI智能语音助手 PHP语音交互系统搭建 PHP调用AI智能语音助手 PHP语音交互系统搭建 Jul 25, 2025 pm 08:45 PM

用户语音输入通过前端JavaScript的MediaRecorderAPI捕获并发送至PHP后端;2.PHP将音频保存为临时文件后调用STTAPI(如Google或百度语音识别)转换为文本;3.PHP将文本发送至AI服务(如OpenAIGPT)获取智能回复;4.PHP再调用TTSAPI(如百度或Google语音合成)将回复转为语音文件;5.PHP将语音文件流式返回前端播放,完成交互。整个流程由PHP主导数据流转与错误处理,确保各环节无缝衔接。

如何用PHP结合AI实现文本纠错 PHP语法检测与优化 如何用PHP结合AI实现文本纠错 PHP语法检测与优化 Jul 25, 2025 pm 08:57 PM

要实现PHP结合AI进行文本纠错与语法优化,需按以下步骤操作:1.选择适合的AI模型或API,如百度、腾讯API或开源NLP库;2.通过PHP的curl或Guzzle调用API并处理返回结果;3.在应用中展示纠错信息并允许用户选择是否采纳;4.使用php-l和PHP_CodeSniffer进行语法检测与代码优化;5.持续收集反馈并更新模型或规则以提升效果。选择AIAPI时应重点评估准确率、响应速度、价格及对PHP的支持。代码优化应遵循PSR规范、合理使用缓存、避免循环查询、定期审查代码,并借助X

python seaborn关节图示例 python seaborn关节图示例 Jul 26, 2025 am 08:11 AM

使用Seaborn的jointplot可快速可视化两个变量间的关系及各自分布;2.基础散点图通过sns.jointplot(data=tips,x="total_bill",y="tip",kind="scatter")实现,中心为散点图,上下和右侧显示直方图;3.添加回归线和密度信息可用kind="reg",并结合marginal_kws设置边缘图样式;4.数据量大时推荐kind="hex",用

PHP集成AI情感计算技术 PHP用户反馈智能分析 PHP集成AI情感计算技术 PHP用户反馈智能分析 Jul 25, 2025 pm 06:54 PM

要将AI情感计算技术融入PHP应用,核心是利用云服务AIAPI(如Google、AWS、Azure)进行情感分析,通过HTTP请求发送文本并解析返回的JSON结果,将情感数据存入数据库,从而实现用户反馈的自动化处理与数据洞察。具体步骤包括:1.选择适合的AI情感分析API,综合考虑准确性、成本、语言支持和集成复杂度;2.使用Guzzle或curl发送请求,存储情感分数、标签及强度等信息;3.构建可视化仪表盘,支持优先级排序、趋势分析、产品迭代方向和用户细分;4.应对技术挑战,如API调用限制、数

python列表到字符串转换示例 python列表到字符串转换示例 Jul 26, 2025 am 08:00 AM

字符串列表可用join()方法合并,如''.join(words)得到"HelloworldfromPython";2.数字列表需先用map(str,numbers)或[str(x)forxinnumbers]转为字符串后才能join;3.任意类型列表可直接用str()转换为带括号和引号的字符串,适用于调试;4.自定义格式可用生成器表达式结合join()实现,如'|'.join(f"[{item}]"foriteminitems)输出"[a]|[

优化用于内存操作的Python 优化用于内存操作的Python Jul 28, 2025 am 03:22 AM

pythoncanbeoptimizedFormized-formemory-boundoperationsbyreducingOverHeadThroughGenerator,有效dattratsures,andManagingObjectLifetimes.first,useGeneratorSInsteadoFlistSteadoflistSteadoFocessLargedAtasetSoneItematatime,desceedingingLoadeGingloadInterveringerverneDraineNterveingerverneDraineNterveInterveIntMory.second.second.second.second,Choos,Choos

Python连接到SQL Server PYODBC示例 Python连接到SQL Server PYODBC示例 Jul 30, 2025 am 02:53 AM

安装pyodbc:使用pipinstallpyodbc命令安装库;2.连接SQLServer:通过pyodbc.connect()方法,使用包含DRIVER、SERVER、DATABASE、UID/PWD或Trusted_Connection的连接字符串,分别支持SQL身份验证或Windows身份验证;3.查看已安装驱动:运行pyodbc.drivers()并筛选含'SQLServer'的驱动名,确保使用如'ODBCDriver17forSQLServer'等正确驱动名称;4.连接字符串关键参数

python pandas融化示例 python pandas融化示例 Jul 27, 2025 am 02:48 AM

pandas.melt()用于将宽格式数据转为长格式,答案是通过指定id_vars保留标识列、value_vars选择需融化的列、var_name和value_name定义新列名,1.id_vars='Name'表示Name列不变,2.value_vars=['Math','English','Science']指定要融化的列,3.var_name='Subject'设置原列名的新列名,4.value_name='Score'设置原值的新列名,最终生成包含Name、Subject和Score三列

See all articles