程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2023-06(1)

Python3基础包——Numpy对一维数组的操作

发布于2019-08-20 11:17     阅读(2110)     评论(0)     点赞(22)     收藏(4)


1. 简介

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。最主要的数据结构是ndarray数组。

NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代 MatLab。
SciPy 是一个开源的 Python 算法库和数学工具包。SciPy 包含的模块有最优化、线性代数、积分、插值、特殊函数、快速傅里叶变换、信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
Matplotlib 是 Python 编程语言及其数值数学扩展包 NumPy 的可视化操作界面。

2. 使用

  • 导入
import numpy as np
  • 1
  • 创建一维数组,使用 np.array()
# 方式有两种:直接将“元素”以list形式添加进去;先制作一个list,然后将其添加进去

my_array = np.array([1, 2, 3, 4, 5, 6])

my_list = [1, 2, 3, 4, 5, 6]
my_array = np.array(my_list)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

创建的方式如上,但是numpy中提供了一些创建一些常量值数组的方法,如下:

# 创建以0为常量值初始化的数组
np.zeros(5,dytpe=float)		# 结果为浮点类型的值为0的数组,一共5个元素(还可以是int类型)

# 创建以1为常量值初始化的数组
np.ones(3)		# 结果为值为1的数组,一共3个元素

# 创建一个空数组,然后使用.fill()方法赋值
a=np.empty(4)		# 4个元素的空数组
a.fill(5.5)			# 赋值5.5

# 创建一个元素递增的数组,给定区间,自定义步长
a=np.arange(8)			# 结果为 [0,1,2,3,4,5,6,7]
b=np.arange(0,1,0.2)		# 结果为在[0,1)之间,步长为0.2的递增数组[0 0.2 0.4 0.6 0.8]
** 对比python的range()函数

# 创建一个元素递增的数组,给定区间,自定义个数
a=np.linspace(-1,1,50)		# 结果为在在[0,1)之间,等分的50个数值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

除此之外,使用numpy中的random模块还可以创建随机数字的数组:

# 生成随意的5个随机自然数,返回在一个数组中
a=np.random.randn(5)							

# 制作一个随机数种子,然后生成10个随机正数,返回在一个数组中
rng= np.random.RandonState(1)
rng.rand(10)

# 创建一个有分布规律的随机数组(还有其他分布规律)
np.random.binomial(10, 0.30, size=10000)
np.random.normal(10,2,50)		# 结果为均值为10,标准差为2的正态分布随机数50个,返回一维数组

** 如果传入两个参数给.rand()/.randn()/.normal()则生成随机二维的数组,详见《numpy对二维数组操作》
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

如果想使用数组去画图,或者训练数据模型的时候,可能需要考虑“降维”

# np.ravel()函数在降维时默认是行序优先,
a=np.array([[1,2],[3,4]])
a.ravel()				# 结果 array([1, 2, 3, 4])
a.ravel('F')			# 结果 array([1, 3, 2, 4])

# reshape函数当参数只有一个-1时表示将数组降为一维
a.reshape(-1)			# 结果 array([1, 2, 3, 4])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 取值
  1. 想获取一维数组中的某个元素,操作和list列表的index一样
a = np.array([5, 2, 7, 0, 11])
a[0]			# 结果为 5
a[:4]			# 结果为 从头开始到索引为4结束
a[2:]			# 结果为 从索引为2的开始到结尾
a[::2]			# 结果为 从头开始到结尾,每2个取一个值
  • 1
  • 2
  • 3
  • 4
  • 5

!!需要注意的是!!
我们可以看出来列表与数组有相同的元素索引机制,但是为什么还要区分两者数据类型呢?主要区别在于:列表中的元素的数据类型可以不一致,任意类型的元素;但是数组的所有元素必须是相同的数据类型。

个人认为还有一个却别在于,数组通过“可视化”可以直接转化成一个表格展示,即使是一维数组;但是列表则无论几维可能无法直接转换成表格的形式阅读

[更新补充]:在学习决策树时,使用numpy时,几乎“全部”都是直接使用“二维数组”(原因是接口不接受一维数据,如果遇到一维数组则需要使用.reshape()将数据升维);那么如果使用list存储数据,虽然也可以使用所以机制,与一维数组并无差异,但是list是无法“升维”的

  1. 对数组中元素逻辑操作(> < & |)
# 直接使用数组进行逻辑判断,结果返回:一个数组,其中每个元素根据逻辑判断的布尔类型的结果
a > 3	
-----------------------------
# 结果如下,虽然看上去和列表长相一样,但是强调一下,一维数组中array只是没有显示出来!!
[False, False, False,True, True]
  • 1
  • 2
  • 3
  • 4
  • 5

说明:
a. 和列表的区别还包括:列表是无法作为一个整体对其中的各个元素进行逻辑判断的!列表能做的只有切片或者叫过滤,这里不做解释,详见python3基础——列表的基础操作
b. 对数据的逻辑判断的用途:使用在数据分析中,挑选数据(可能学习到二维数组时,会有更好的理解)

  • 过滤/切片

过滤的方法很多,这里只简单介绍使用逻辑符号的方式。

# 需要注意的是,我们对数组切片或者过滤的操作希望得到的仍然是一个数组
# 所以我们要将"逻辑判断作为参数"传入数组中时,返回的则是一个过滤后的数组

a[a > 3]						# 结果 [4,5] 且一维数组中array没有显示出来
a[(a > 3) | (a < 2)]			# 结果 [1,4,5] 且一维数组中array没有显示出来
  • 1
  • 2
  • 3
  • 4
  • 5
  • 对一维数组中每个元素同时操作
# 对数组中元素➕操作
a_plus_3 = a + 3

# 对数组中元素 乘方** 操作
a ** 2 							# 结果为 [ 1,  4,  9, 16, 25, 36]
  • 1
  • 2
  • 3
  • 4
  • 5

未完
下一篇《Python3基础包——Numpy对二维数组的操作》



所属网站分类: 技术文章 > 博客

作者:胡龙茶

链接:https://www.pythonheidong.com/blog/article/49079/1e9577713c4a4320bf6a/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

22 0
收藏该文
已收藏

评论内容:(最多支持255个字符)