来都来了,你确定不看看,使用python中的科学计算库numpy操作数组,你一定能学废!!(图文并茂版!!!!)(代码片段)

温柔且上进c 温柔且上进c     2023-01-22     567

关键词:

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 时,生成的数组中会显示间距,反之不显示
dtypendarray 的数据类型
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.dtypendarray 对象的元素类型
ndarray.itemsizendarray 对象中每个元素的大小,以字节为单位
ndarray.flagsndarray 对象的内存信息
ndarray.realndarray 元素的实部
ndarray.imagndarray 元素的虚部
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等)?例如,让我们用它的颜色条创建和绘制图像 查看详情