关键词:
Numpy操作数组
Numpy库
Numpy库的介绍
- NumPy(Numerical Python) 是科学计算基础库,提供大量科学计算相关功能,比如数据 统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组 与矩阵运算,Numpy 支持向量处理 ndarray 对象,提高程序运算速度,是使用c语言编写的python库!!
Numpy库的安装:
- 基本安装:
pip install numpy
- 换源安装(豆瓣的源):
pip install numpy -i https://pypi.douban.com/simple
python中数组与列表对比
列表:
- list(列表) 是 python 的内置数据类型,list 中存放的数据类型不必相同,在 list 中保存的是数据的存放的地址,即指针,并非数据本身,在内存中并不是按照顺序存储的,并且创建时并不需要指定长度!!!
- 可以高效、方便的添加,删除,修改列表中的元素
数组:
- 数组是需要使用python中Numpy库进行创建的
- 一般都为固定长度,并且在内存中时连续存储,存储的是真正的数据
- 存储的数据的数据类型必须是相同的
数组的创建
使用array方法创建数组
- numpy 模块的 array 方法可以生成多维数组。例如,如果要生成一个二维数组,需要向 array 方法传递一个列表类型的参数。每一个列表元素是一维的 ndarray 类型数组,作为二维 数组的行。另外,通过 ndarray 类的 shape 属性可以获得数组每一维的元素个数(元组形式), 也可以通过 shape[n]形式获得每一维的元素个数,其中 n 是维度,从 0 开始
- array方法参数:
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
参数名称 | 描述 |
---|---|
object | 数组或嵌套的数列 |
dtype | 数组元素的数据类型,可选 |
copy | 对象是否需要复制,可选 |
order | 创建数组的样式,C 为行方向,F 为列方向,A 为任意方向(默认) |
subok | 默认返回一个与基类类型一致的数组 |
ndmin | 指定生成数组的最小维度 |
注意:
- 一般在使用numpy库时,会给numpy库起个别名np,方便后续使用
- 代码演示:
- 使用array创建一维数组
# 一般在使用numpy库时,会给numpy库起个别名np
import numpy as np
# 传入列表类型
arr1 = np.array([1, 2, 3, 4])
print(arr1)
print('数组的维度:', arr1.shape)
- 使用array创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr2)
print('数组的维度:', arr2.shape)
ndmin,dtype参数的使用
arr1 = np.array([1, 2, 3, 4], ndmin=3, dtype=float)
print(arr1)
print('数组的维度:', arr1.shape)
- 创建三维数组,且数组中的元素的数据类型都为float类型
使用arange方法创建数组
- 使用 arange 方法创建数值范围并返回 ndarray 对象,参数格式如下:
numpy.arange(start, stop, step, dtype)
参数名称 | 描述 |
---|---|
start | 起始值,默认为 0 |
stop | 终止值(不包含) |
step | 步长,默认为 1 |
dtype | 返回 ndarray 的数据类型,如果没有提供,则会使用输入数据的类型 |
- 使用arange方法生成0-5的数组
import numpy as np
arr1 = np.arange(0, 6)
print(arr1)
print('数组的维度:', arr1.shape)
- arange方法设置起始值、终止值及步长生成数组
arr2 = np.arange(100, 120, 2)
print(arr2)
print('数组的维度:', arr2.shape)
- 起始值:100 、终止值:120、 步长:2 生成的数组中不包含终止值
- 使用arange创建二维数组
arr3 = np.array([np.arange(1, 4), np.arange(4, 7), np.arange(7, 10)])
print(arr3)
print('数组的维度:', arr3.shape)
使用random(随机数)方法创建数组
- 使用random.random生成一维数组与二维数组,该方法返回的是符合在[0.0, 1.0)范围的随机数的数组
import numpy as np
arr1 = np.random.random(size=5)
arr2 = np.random.random(size=(3, 4))
print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
- 数组中的元素都是大于等于0,小于1的随机数
- 使用random.randin生成一维数组与二维数组,该方法返回为在自定义某个范围的随机数组成的数组(int类型)
- 该方法有三个参数 low、high、size 三个参数。默认 high 是 None,如果只有 low,那范围就是[0,low)。如果有 high,范围就是[low,high),size为需要生成数组的维度
import numpy as np
arr1 = np.random.randint(10, size=5)
arr2 = np.random.randint(5, 10, size=5)
arr3 = np.random.randint(5, 10, size=(3, 4))
print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
print(arr3)
print('数组的维度:', arr3.shape)
- 使用random.randn创建符合标准正太分布的随机数数组
- numpy.random.randn(d0,d1,…,dn),randn 函数返回一个或一组样本,具有标准正态分布(期望为 0,方差为 1), dn 表格每个维度,返回值为指定维度的 array(数组)
**
import numpy as np
arr1 = np.random.randn(5)
arr2 = np.random.randn(2, 3)
arr3 = np.random.randn(2, 3, 4)
print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
print(arr3)
print('数组的维度:', arr3.shape)
- 使用random.normal方法,生成指定方差与期望的随机数组
- 参数:正太分布(高斯分布)loc:期望 scale:方差 size :维度
import numpy as np
arr1 = np.random.normal(loc=2, scale=5, size=(4))
arr2 = np.random.normal(loc=2, scale=5, size=(2, 3))
arr3 = np.random.normal(loc=2, scale=5, size=(2, 3, 4))
print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
print(arr3)
print('数组的维度:', arr3.shape)
其它方式创建数组
-
ndarray 数组除了可以使用底层 ndarray 构造器来创建外,也可以通过以下几种方式来创建:
-
zeros方法创建指定大小的数组,数组元素以 0 来填充
-
参数:numpy.zeros(shape, dtype = float, order = ‘C’)
import numpy as np
arr1 = np.zeros(5)
arr2 = np.zeros(5, dtype=int)
arr3 = np.zeros((2, 3, 4), dtype=int)
print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
print(arr3)
print('数组的维度:', arr3.shape)
- numpy.ones 创建指定形状的数组,数组元素以 1 来填充
- 参数:numpy.ones(shape, dtype = None, order = ‘C’)
import numpy as np
arr1 = np.ones(5)
arr2 = np.ones(5, dtype=int)
arr3 = np.ones((2, 3, 4), dtype=int)
print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
print(arr3)
print('数组的维度:', arr3.shape)
- numpy.empty 方法用来创建一个指定维度(shape)、数据类型(dtype)且未初始化的数组,里面的元素的值是之前内存中存储的值
- 参数:numpy.empty(shape, dtype = float, order = ‘C’)
参数名称 | 描述 |
---|---|
shape | 数组形状(维度) |
dtype | 数据类型 |
order | 有"C"和"F"两个选项,分别代表,行优先和列优先,在计算机内存 中的存储元素的顺序 |
import numpy as np
arr1 = np.empty(5)
arr2 = np.empty(5, dtype=int)
arr3 = np.empty((2, 3, 4), dtype=int)
print(arr1)
print('数组的维度:', arr1.shape)
print(arr2)
print('数组的维度:', arr2.shape)
print(arr3)
print('数组的维度:', arr3.shape)
- linspace 方法用于创建一个一维数组,数组是一个等差数列构成的
- 参数如下:
linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数名称 | 描述 |
---|---|
start | 序列的起始值 |
stop | 序列的终止值,如果 endpoint参数为 true,该值包含于数列中 |
num | 要生成的等步长的样本数量,默认为 50 |
endpoint | 该值为 ture 时,数列中中包含 stop 值,反之不包含,默认是 True |
retstep | 如果为 True 时,生成的数组中会显示间距,反之不显示 |
dtype | ndarray 的数据类型 |
import numpy as np
arr1 = np.linspace(0, 10, num=5, dtype=int)
print(arr1)
print('数组的维度:', arr1.shape)
数组对象的属性
- NumPy 最重要的一个特点是其N 维数组对象 ndarray,它是一系列同类型数据的集 合,以 0 下标为开始进行集合中元素的索引。
- ndarray 对象是用于存放同类型元素的多维数组。
- ndarray 中的每个元素在内存中都有相同存储大小的区域
- ndarray 内部由以下内容组成:
一个指向数据(内存或内存映射文件中的一块数据)的指针
数据类型或 dtype,描述在数组中的固定大小值的格子
一个表示数组形状(shape)的元组,表示各维度大小的元组 - NumPy 的数组中比较重要 ndarray 对象属性有:
属性名 | 描述 |
---|---|
ndarray.ndim | 秩,即轴的数量或维度的数量 |
ndarray.shape | 数组的维度,对于多维数组,n 行 m 列 |
ndarray.size | 数组元素的总个数,相当于 .shape 中 n*m 的值 |
ndarray.dtype | ndarray 对象的元素类型 |
ndarray.itemsize | ndarray 对象中每个元素的大小,以字节为单位 |
ndarray.flags | ndarray 对象的内存信息 |
ndarray.real | ndarray 元素的实部 |
ndarray.imag | ndarray 元素的虚部 |
ndarray.data | 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用此属性 |
import numpy as np
arr1 = np.arange(1, 13)
arr2 = arr1.reshape((2, 2, 3))
arr3 = np.random.randn(3, 4, 5)
print('ndim 属性'.center(20, '*'))
print('ndim:', arr1.ndim, arr2.ndim, arr3.ndim)
print('shape 属性'.center(20, '*'))
print('shape:', arr1.shape, arr2.shape, arr3.shape)
print('dtype 属性'.center(20, '*'))
print('dtype:', arr1.dtype, arr2.dtype, arr3.dtype)
print('size 属性'.center(20, '*'))
print('size:', arr1.size, arr2.size, arr3.size)
print('itemsize 属性'.center(20, '*')) # 一个字节是 8 位
print('itemsize:', arr1.itemsize, arr2.itemsize, arr3.itemsize)
数组的切片与索引
-
ndarray 对象的内容可以通过索引或切片来访问和修改,与 Python 中 list 的切片操作 一样
-
ndarray 数组可以基于 0 - n 的下标进行索引,并设置 start, stop 及 step 参数进行,从 原数组中切割出一个新数组
-
一维数组切片和索引的使用
import numpy as np
arr1 = np.arange(1, 13)
arr2 = arr1[2::2]
arr3 = arr1[5:]
print(arr1)
print(arr2)
print(arr3)
- 二维数组根据索引值获取
import numpy as np
arr1 = np.arange(1, 13)
arr2 = arr1.reshape(3, 4)
arr3 = arr2[2]
arr4 = arr2[1][1]
print(arr2)
print('第三行', arr3)
print('第二行第二列', arr4)
- 二维数组切片的使用
- 操作方式:[对行切片,对列切片]
import numpy as np
arr1 = np.arange(1, 17).reshape(4, 4)
print(arr1)
print('第二列元素:', arr1[:, 1:2])
print('奇数行第一列:', arr1[::2, 0])
改变数组的维度
- 处理数组的一项重要工作就是改变数组的维度,包含提高数组的维度和降低数组的维 度,还包括数组的转置。Numpy 提供的大量 API 可以很轻松地完成这些数组的操作。例如, 通过 reshape 方法可以将一维数组变成二维、三维或者多维数组。通过 ravel 方法或 flatten 方法可以将多维数组变成一维数组。改变数组的维度还可以直接设置 Numpy 数组的 shape 属性(元组类型),通过 resize 方法也可以改变数组的维度
import numpy as np
arr1 = np.arange(1, 25)
print(arr1)
print('arri的维度', arr1.shape)
print('-' * 30)
# 使用reshape将一维数组变成三维数组
arr2 = arr1.reshape((2, 3, 4))
print(arr2)
print('数组arr2的维度:', arr2.shape)
print('-' * 30)
# 使用reshape将一维数组变成二维数组
arr3 = arr1.reshape(3, 8)
print(arr3)
print('数组arr3的维度:', arr3.shape)
print('-' * 30)
# 使用ravel函数将三维的arr2变成一维的数组
arr4 = np.ravel(arr2)
print(arr4)
print('数组arr3的维度:', arr4.shape)
print('-' * 30)
# 使用flatten函数将二维的arr3变成一维的数组
arr5=arr3.flatten()
print(arr5)
print('数组arr5的维度:', arr5.shape)
print('-' * 30)
数组的转置
- 使用transpose方法对数组进行转置
import numpy as np
arr1 = np.arange(1, 25).reshape(4, 6)
print(arr1)
print('arri的维度', arr1.shape)
# 二维数组的转置
arr2 = np.transpose(arr1)
print(arr2)
print('数组arr2的维度:', arr2.shape)
# 三维数组的转置
arr = np.arange(1, 25).reshape((2, 3, 4))
arr3 = np.transpose(arr, [1, 0, 2])
print(arr3)
print('数组arr3的维度:', arr3.shape)
Numpy聚合函数
- NumPy 提供了很多统计函数,用于从数组中查找最小元素,最大元素,百分位标准差 和方差等。 具
来都来了,你确定不看看常用的冒泡排序算法<一>!(python版本图文并茂!!!!)(代码片段)
常见的排序!!冒泡排序冒泡排序 基本概念: •冒泡排序(英语:BubbleSort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺... 查看详情
来都来了,你确定不看看常用的选择排序算法<二>!(python版本图文并茂!!!!)(代码片段)
选择排序算法概念: •选择排序(Selectionsort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余... 查看详情
来都来了,你确定不看看常用的插入排序算法<三>!(python版本图文并茂!!!!)(代码片段)
插入排序算法概念: •插入排序(英语:InsertionSort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入... 查看详情
来都来了,你确定不看看,git从零开始的详细使用教程,你一定能学废!!(万字长文图文并茂版!!!!)(代码片段)
Git详细使用教程!!!认识GitWindows安装GitGit环境配置用户名与邮箱地址的设置Git中实用的自定义配置Git忽略某个或某类文件强制添加被忽略的文件偷懒大法:配置别名配置文件Git的基础命令在已存在目录中初始化... 查看详情
来都来了,你确定不看看,阿里云centos8安装docker!!(图文并茂版!!!)(代码片段)
阿里云Centos8安装Docker准备工作查看centos系统的版本号查看centos系统内核版本Centos8安装Docker切换到管理员权限安装必要的系统工具添加软件镜像源(阿里镜像源)更新并安装Docker-CE(社区版)安装完成查看Docker版本准备工作... 查看详情
来都来了,你确定不看看,阿里云服务器centos8安装mysql8.0!!(图文并茂版!!!)(代码片段)
阿里云服务器Centos8安装MySQL8.0使用最新的包管理器dnf安装MySQL设置开机自启动检查MySQL的启动状态查看MySQL版本添加密码及安全设置使用root用户登录远程连接数据库配置设置远程连接信息开放防火墙MySQL3306端口关闭MySQL主机查询dns... 查看详情
来都来了,你确定不看看,在linuxcentos8下安装redis,你一定能学废!!!(图文并茂版!!!)(代码片段)
centos8安装redis安装gcc编译环境新建个目录,下载redis下载完成后解压缩进入文夹目录,并进行编译和安装查看redis版本!!启动redis服务端启动redis客户端修改配置文件并以配置文件启动redisbind127.0.0.1protected-moderequir... 查看详情
在struts2中设计屏幕
...那里但struts2中没有标签来设计,请帮我怎么做答案我不确定你的意思是什么没有标签符合你的要求?我建议你参考tagreferences,看看你可以使用的所有标签。对于清除按钮,你可以使用S2reset标签登录一个简单的submitbutton将为你工... 查看详情
整理的70道阿里高级java面试题,都来挑战一下,看看自己有多厉害
整理的70道阿里高级Java面试题,都来挑战一下,看看自己有多厉害。1、java事件机制包括哪三个部分?分别介绍。2、为什么要使用线程池?3、线程池有什么作用?4、说说几种常见的线程池及使用场景。5、线程池都有哪几种工作队列... 查看详情
我的表格视图已创建,但数组未显示在表格视图中,控制台中的所有数据都来了。请帮我解决 json 解析
...创建,但数组未显示在表格视图中,控制台中的所有数据都来了。请帮我解决json解析【英文标题】:mytableviewiscreatedbutarrayisnotshowingintableview,inconsoleallthedataarecoming.pleasehelpmetosolvejsonparsing【发布时间】:2016-03-0207:37:15【问题描述... 查看详情
[译]关于python中的数字你可能不知道的3件事
...索引。但是Python中的数字不仅仅是它们的原始值。让我们看看你可能不知道的关于Python中数字的三件事。1.数字有方法Python中有个概念叫做:一切皆对象。您在Python中学习的第一个对象"HelloWorld"是表示字符串的str... 查看详情
面试阿里,字节跳动90%会被问到的微服务,你确定不进来看看吗?
1、您对微服务有何了解?微服务:又称微服务架构,是一种架构风格,它将应用程序构建为以业务领域为模型的小型自治服务集合。通俗地说,你必须看到蜜蜂如何通过对齐六角形蜡细胞来构建它们的蜂窝状物。他们最初从使... 查看详情
使用 awk 删除列中的科学记数法
...column【发布时间】:2016-02-0322:12:53【问题描述】:虽然我确定这已经在某处得到了回答,但我找不到在哪里,所以如果这是重复的,我很抱歉。我们开始吧。我有一个文件(真的,我有很多文件),其中X、Y和Z数据点由空格分隔... 查看详情
使用 Python 验证数据科学中的假设的方法是啥?
】使用Python验证数据科学中的假设的方法是啥?【英文标题】:WhatarethewaystovalidatethehypothesisinDataSciencewithPython?使用Python验证数据科学中的假设的方法是什么?【发布时间】:2019-08-0506:26:00【问题描述】:我想根据提供的数据验... 查看详情
如何用python合并excel表中的重复内容
...一样的合并,作者合并(如图2)想了半天实在是想不出来了……python操作excel的库有:xlrd和xlwt,这两个库一个可以读一个可以写。当然你可以直接用openpyxl这个库,支持读写。代码就是写一个while循环读取每一个条目比较合并。... 查看详情
python科学计算——任意波形拟合
...,已知他们之间的函数关系:y=f(x),通过这些信息,需要确定函数中的一些参数项。例如,f是一个线型函数f(x)=k*x+b,那么参数k和b就是需要确定的值。如果这些参数用p表示的话,那么就需要找到一组p值使得如下公式中的S函数... 查看详情
5000张高清壁纸大图(手机用),用python在法律的边缘又试探了一把(代码片段)
...在浏览网页,忽然发现一张手机壁纸不错,既然来都来了,不试一把也不合适。Python爬虫120例,已完成文章清单10行代码集2000张美女图,Python爬虫120例,再上征途通过Python爬虫,发现60%女装大佬游走在c... 查看详情
matplotlib 中的科学记数法颜色条
...条。当我尝试强制以科学记数法编写刻度标签时,问题就来了。如何在彩条的刻度中强制使用科学记数法(即1x10^0、2x10^0、...、1x10^2等)?例如,让我们用它的颜色条创建和绘制图像 查看详情