编程语言   发布时间:2022-06-22  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了机器学习---初识python的numpy模块大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

 🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝🔝

🥰 博客首页:knighthood2001

😗 欢迎点赞👍评论🗨️

❤️ 热爱python࿰c;期待与大家一同进步成长!!❤️

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

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

        本文主要带大家粗略的学习python的numpy模块!!

目录

一、array类型

1.1array类型的基本使用

1.2对更高维度数据的处理

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

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

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

1.4Numpy基础计算演示

二、线性代数相关 

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

四、总结


一、array类型

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

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

1.1array类型的基本使用

import numpy as np
# 通过np.array()方法创建一个名为array的array类型࿰c;参数是一个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࿰c;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࿰c;得到浮点数表示的结果
print(array % 2)
# 结果为:[1 0 1 0]

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

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

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


1.2对更高维度数据的处理

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

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

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

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

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

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

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

高级一点的就是flatten()和reshape()函数了࿰c;需要注意下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)
@R_696_1179@结果为:
[[[0. 0. 0.]
  [0. 0. 0.]
  [0. 0. 0.]]

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

 [[1. 1. 1.]
  [1. 1. 1.]
  [1. 1. 1.]]]
@R_696_1179@
print(array_ones.shapE)
# 结果为:(2, 3, 3)

注意:如果将(2࿰c;3࿰c;3)改为(3࿰c;3)

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

其生成的是3行3列的array 


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

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

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

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

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

start:序列的起始值。

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

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

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

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

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

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

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

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

# 生成一个array࿰c;将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类型及其基本操作方法࿰c;了解array类型可以表示向量、矩阵和多维张量。

        线性代数计算在科学计算领域中非常重要࿰c;因此接下来了解以下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)
# 将两个向量相乘࿰c;在这里也就是点乘࿰c;结果为20
print(m)

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

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

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

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

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

p = np.linalg.norm([1, 2])
print(p)
# 求一个向量的范数的值࿰c;结果为2.2360679774997898
# 如果norm()方法没有指定第2个参数࿰c;默认为求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表示正无穷࿰c;也就是向量中元素值最大的那个࿰c;其结果为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
# 使用*符号将两个向量相乘࿰c;是将两个向量中的元素分别相乘࿰c;也就是我们所讲到的哈达马乘积
print(v)
# [ 2  6 12]

w = vector_a ** vector_b
print(w)
# 使用二元运算符**对两个向量进行操作,结果为array([1, 8, 81]࿰c;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)
@R_696_1179@
[[-2.   1. ]
 [ 1.5 -0.5]]@R_696_1179@

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

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

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

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

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

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

# 生成一个满足正态分布(高斯分布)的矩阵,其维度是4*4
d = np. random.normal(size=(4, 4))
print(d)
@R_696_1179@
[[ 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]]@R_696_1179@

# 随机产生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个样本࿰c;采集过程是有放回的
f = np.random.choice(data, 5)
print(f)
# [1 7 3 3 4]

# 从data数据中随机采集5个样本࿰c;采集过程是没有放回的
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进行乱序࿰c;并替换为新的data
np.random.shuffle(data)
print(data)
# [9 7 0 3 8 5 2 1 4 6]

四、总结

        目前机器学习领域非常火爆࿰c;因此如果想涉及该领域࿰c;学习numpy的相关知识是必不可少的࿰c;因此笔者写了这篇numpy基础型文章c;供大家学习

        ②以上代码笔者是纯手敲的࿰c;如果觉得不错的话࿰c;希望三连支持一下!! ❤️❤️

大佬总结

以上是大佬教程为你收集整理的机器学习---初识python的numpy模块全部内容,希望文章能够帮你解决机器学习---初识python的numpy模块所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。