Maison > développement back-end > Tutoriel Python > Introduction détaillée au module numpy de python

Introduction détaillée au module numpy de python

WBOY
Libérer: 2022-05-19 11:43:38
avant
4201 Les gens l'ont consulté

Cet article vous apporte des connaissances pertinentes sur python, qui présente principalement des problèmes liés au module numpy est l'abréviation de Numerical Python extensions, qui signifie littéralement extension de calcul numérique Python. tout le monde.

Introduction détaillée au module numpy de python

Apprentissage recommandé : Tutoriel vidéo Python

Numpy est l'abréviation de Numerical Python extensions, qui signifie littéralement extension de calcul numérique Python. Numpy est une dépendance de nombreuses bibliothèques d'apprentissage automatique en python, qui implémentent des calculs matriciels de base via Numpy.

Numpy

prend en charge les calculs matriciels et vectoriels de haut niveau et à grande échelle, et fournit en même temps des fonctions plus riches. De plus, Numpy est basé sur un langage de programmation plus moderne - Python Python est populaire dans le cercle technologique avec ses caractéristiques open source, gratuit, flexible, facile à apprendre et ses bonnes fonctionnalités d'ingénierie. Il est devenu un langage de programmation courant. dans les domaines de l'apprentissage automatique et de l'analyse de données. 1. Type de tableau

Le type de tableau de numpy est un type de données de base de la bibliothèque. Ce type de données signifie littéralement tableau, ce qui signifie que son attribut le plus critique est l'élément avec les dimensions. peut utiliser ce type de données pour implémenter des tableaux multidimensionnels. #                                                                                                                                                        #

1.1 Utilisation de base du type tableau

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
Copier après la connexion
Grâce au code ci-dessus, nous pouvons comprendre l'utilisation de base du type tableau dans Numpy.

Nous pouvons voir que array est en fait une classe qui est instanciée dans un objet en passant un paramètre de liste, encapsulant ainsi les données.

1.2 Traitement des données de dimension supérieure

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]]
Copier après la connexion

Les plus avancées sont les fonctions flatten() et reshape(). Il est à noter que le résultat renvoyé par reshape() est de type tableau.

1.3Numpy crée un type spécial de type de tableau


1.3.1 Génère un tableau composé uniquement de 0 ou de 1
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)
Copier après la connexion

Remarque : Si vous remplacez (2, 3, 3) par (3, 3)

array_zeros = np.zeros((3, 3))
print(array_zeros)
'''结果为:
[[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]]
'''
Copier après la connexion

Il génère un tableau avec 3 lignes et 3 colonnes

1.3.2np.arrange() et np.linspace()

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

Renvoie des valeurs uniformément distribuées dans l'intervalle donné.

Les valeurs sont générées dans l'intervalle semi-ouvert ``[start, stop)`` (en d'autres termes, l'intervalle incluant `start` mais excluant `stop`).

Pour les arguments entiers, cette fonction est équivalente à la fonction `range` intégrée de Python, mais renvoie un ndarray au lieu d'une liste. Lorsque vous utilisez des pas non entiers (par exemple 0,1), les résultats sont souvent incohérents. Pour ces cas, il est préférable d'utiliser `numpy.linspace`. linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)

Renvoie des nombres uniformément répartis dans l'intervalle de temps spécifié.

Renvoie "num" d'échantillons uniformément répartis, calculés sur l'intervalle [`start`, `stop`].

start : La valeur de départ de la séquence.

stop :
La valeur de fin de la séquence, sauf si `endpoint` est défini sur False. Dans ce cas, la séquence comprend tous les échantillons uniformément répartis sauf le dernier « num + 1 », excluant ainsi « stop ». Notez que lorsque « endpoint » est False, la taille du pas change.

num=50 :

Le nombre d'échantillons à générer. La valeur par défaut est 50. Doit être non négatif.

endpoint=True :

Si vrai, `stop` est le dernier échantillon. Sinon, non inclus. La valeur par défaut est vrai.

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. ]
Copier après la connexion

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
Copier après la connexion

二、线性代数相关 

        前面我们已经了解到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]]'''
Copier après la connexion

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

        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]
Copier après la connexion

推荐学习:python视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:csdn.net
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal