numpy(史上最全)

news2024/9/21 14:46:38

目录

numpy简介

性能对比

 ndarray属性

numpy中的数组:

几个创建的函数:

1) np.ones(shape, dtype=None, order='C')

shape: 形状,使用元组表示

2) np.zeros(shape, dtype=float, order='C')

3) np.full(shape, fill_value, dtype=None, order='C')

4) np.eye(N, M=None, k=0, dtype=float)

5) np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

6) np.arange([start, ]stop, [step, ]dtype=None)

7) np.random.randint(low, high=None, size=None, dtype='l')

8) 正态分布函数

9) np.random.random(size=None)

10) np.random.permutation(10) 生成随机索引

11) 随机种子

 Numpy数组操作

数组与数的计算:

数组与数组的计算:

广播原则:

numpy.append

numpy.insert

numpy.delete

numpy.reshape

numpy.ndarray.flatten()

numpy.ravel()

数组(矩阵)转置和轴对换:

数组的转置

ndarray的索引和切片

【重点1】ndarray的高维数组访问,使用[dim1_index, dim2_index...]

列表访问

bool访问

高维数组中使用

切片访问

ndarray的级联和切分

级联

np.concatenate()

np.hstack与np.vstack  

切分

- np.split

- np.vsplit

- np.hsplit 

Numpy数组操作

数组与数的计算:

数组与数组的计算:

广播原则:

数组(矩阵)转置和轴对换:

数组的转置

函数和方法method总览

创建数组

转化

操作

询问

排序

运算

基本统计

基本线性代数


numpy简介

NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- Numerical和Python。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。在数据分析和机器学习领域被广泛使用。他有以下几个特点:

  1. numpy内置了并行运算功能,当系统有多个核心时,做某种计算时,numpy会自动做并行计算。
  2. Numpy底层使用C语言编写,内部解除了GIL(全局解释器锁),其对数组的操作速度不受Python解释器的限制,效率远高于纯Python代码。
  3. 有一个强大的N维数组对象Array(一种类似于列表的东西)。
  4. 实用的线性代数、傅里叶变换和随机数生成函数。

总而言之,他是一个非常高效的用于处理数值型运算的包。

  1. 官网:https://docs.scipy.org/doc/numpy/user/quickstart.html。
  2. 中文文档:https://www.numpy.org.cn/user_guide/quickstart_tutorial/index.html。

性能对比

# Python列表的方式
import time
t1 = time.time()
a = []
for x in range(100000):
    a.append(x**2)
t2 = time.time()
t = t2 - t1
print(t)
import numpy as np
t3 = time.time()
b = np.arange(100000)**2
t4 = time.time()
print(t4-t3)

0.007939815521240234

0.0010571479797363281

 ndarray属性

ndarray属性
1. ndim:维度
2. shape:形状(各维度的长度)
3. size:总长度
4. dtype:元素类型

data = np.arange(12).reshape(3, 4)  # 创建一个3行4列的数组
data 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
type(data)
numpy.ndarray
data.ndim         # 数组维度的个数,输出结果2,表示二维数组
2
data.shape        # 数组的维度,输出结果(3,4),表示3行4列
(3, 4)
data.size         # 数组元素的个数,输出结果12,表示总共有12个元素
12
data.dtype # 数组元素的类型,输出结果dtype('int64'),表示元素类型都是int64


   a1 = np.arange(12) #生成一个有12个数据的一维数组
   print(a1) 

   a2 = a1.reshape((3,4)) #变成一个2维数组,是3行4列的
   print(a2)

   a3 = a1.reshape((2,3,2)) #变成一个3维数组,总共有2块,每一块是2行2列的
   print(a3)

   a4 = a2.reshape((12,)) # 将a2的二维数组重新变成一个12列的1维数组
   print(a4)

   a5 = a2.flatten() # 不管a2是几维数组,都将他变成一个一维数组
   print(a5)


   a1 = np.array([1,2,3],dtype=np.int32)
   print(a1.itemsize) # 打印4,因为每个字节是8位,32位/8=4个字节

numpy中的数组:

Numpy中的数组的使用跟Python中的列表非常类似。他们之间的区别如下:

  1. 一个列表中可以存储多种数据类型。比如a = [1,'a']是允许的,而数组只能存储同种数据类型。
注意:
- numpy默认ndarray的所有元素的类型是相同的
- 如果传进来的列表中包含不同的类型,则统一为同一类型,优先级:str>float>int

2.数组可以是多维的,当多维数组中所有的数据都是数值类型的时候,相当于线性代数中的矩阵,是可以进行相互间的运算的。

几个创建的函数:

1

1) np.ones(shape, dtype=None, order='C')

shape: 形状,使用元组表示

2) np.zeros(shape, dtype=float, order='C')

3) np.full(shape, fill_value, dtype=None, order='C')

4) np.eye(N, M=None, k=0, dtype=float)

5) np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

6) np.arange([start, ]stop, [step, ]dtype=None)

7) np.random.randint(low, high=None, size=None, dtype='l')

8) 正态分布函数

np.random.randn(d0, d1, ..., dn)  标准正态分布 
np.random.normal()  普通正态分布

9) np.random.random(size=None)

生成0到1的随机数,左闭右开

10) np.random.permutation(10) 生成随机索引

11) 随机种子

 Numpy数组操作

数组与数的计算:

在Python列表中,想要对列表中所有的元素都加一个数,要么采用map函数,要么循环整个列表进行操作。但是NumPy中的数组可以直接在数组上进行操作。示例代码如下:

import numpy as np
a1 = np.random.random((3,4))
print(a1)
# 如果想要在a1数组上所有元素都乘以10,那么可以通过以下来实现
a2 = a1*10
print(a2)
# 也可以使用round让所有的元素只保留2位小数
a3 = a2.round(2)

以上例子是相乘,其实相加、相减、相除也都是类似的。

数组与数组的计算:

  1. 结构相同的数组之间的运算:
a1 = np.arange(0,24).reshape((3,8))
a2 = np.random.randint(1,10,size=(3,8))
a3 = a1 + a2 #相减/相除/相乘都是可以的
print(a1)
print(a2)
print(a3)
  1. 与行数相同并且只有1列的数组之间的运算:
a1 = np.random.randint(10,20,size=(3,8)) #3行8列
a2 = np.random.randint(1,10,size=(3,1)) #3行1列
a3 = a1 - a2 #行数相同,且a2只有1列,能互相运算
print(a3)
  1. 与列数相同并且只有1行的数组之间的运算:
a1 = np.random.randint(10,20,size=(3,8)) #3行8列
a2 = np.random.randint(1,10,size=(1,8))
a3 = a1 - a2
print(a3)

广播原则:

ndarray广播机制的两条规则

如果
1. 两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符
2. 或其中的一方的长度为1

则认为它们是广播兼容的。
广播会在缺失和(或)长度为1的维度上进行。

numpy.append

### 添加元素

numpy.append 函数在数组的末尾添加值。 追加操作会分配整个数组,并把原来的数组复制到新数组中

注意:
1. 插入的维度要保证所有数组的长度是相同的
2. 如果没有指定轴,数组会被扁平处理

numpy.insert

numpy.insert 函数在给定索引之前,沿给定轴在输入数组中插入值

如果未提供轴,则输入数组会被展开

numpy.delete

### 删除元素

numpy.delete 函数返回从输入数组中删除指定子数组的新数组。 

如果未提供轴参数,则输入数组将展开。

numpy.reshape

### 数组变形reshape

numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下: numpy.reshape(arr, newshape, order='C')

- arr:要修改形状的数组
- newshape:整数或者整数数组,新的形状应当兼容原有形状
- order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。

numpy.ndarray.flatten()

numpy.ravel()

### 数组扁平处理
numpy.ndarray.flatten() 返回一份展开的数组拷贝,对拷贝所做的修改不会影响原始数组
numpy.ravel() 展平的数组元素,返回一个展开的数组引用,修改会影响原始数组。

数组(矩阵)转置和轴对换:

numpy中的数组其实就是线性代数中的矩阵。矩阵是可以进行转置的。ndarray有一个T属性,可以返回这个数组的转置的结果。示例代码如下:

a1 = np.arange(0,24).reshape((4,6))
a2 = a1.T
print(a2)

另外还有一个方法叫做transpose,这个方法返回的是一个View,也即修改返回值,会影响到原来数组。示例代码如下:

a1 = np.arange(0,24).reshape((4,6))
a2 = a1.transpose()

为什么要进行矩阵转置呢,有时候在做一些计算的时候需要用到。比如做矩阵的内积的时候。就必须将矩阵进行转置后再乘以之前的矩阵:

a1 = np.arange(0,24).reshape((4,6))
a2 = a1.T
print(a1.dot(a2))

dot()的使用

参考文档:https://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html

dot()返回的是两个数组的点积(dot product)

1.如果处理的是一维数组,则得到的是两数组的內积(顺便去补一下数学知识)

a=np.random.randint(0,8,size=(2,4))
b=np.random.randint(4,16,size=(4,2))
np.dot(a,b)

数组的转置

ndarray的索引和切片

【重点1】ndarray的高维数组访问,使用[dim1_index, dim2_index...]

列表访问

bool访问

bool_index = [False, True, False, True, False]

arr3[bool_index]

高维数组中使用

切片访问

ndarray的级联和切分

级联

### 级联
级联的注意事项:
- 级联的参数是列表:一定要加中括号或小括号
- 维度必须相同
- 形状相符
- 级联的方向默认是shape这个tuple的第一个值所代表的维度方向
- 可通过axis参数改变级联的方向

np.concatenate()

np.hstack与np.vstack  

切分

与级联类似,三个函数完成切分工作:
- np.split
- np.vsplit
- np.hsplit

- np.split

- np.vsplit

- np.hsplit 

Numpy数组操作

数组与数的计算:

在Python列表中,想要对列表中所有的元素都加一个数,要么采用map函数,要么循环整个列表进行操作。但是NumPy中的数组可以直接在数组上进行操作。示例代码如下:

import numpy as np
a1 = np.random.random((3,4))
print(a1)
# 如果想要在a1数组上所有元素都乘以10,那么可以通过以下来实现
a2 = a1*10
print(a2)
# 也可以使用round让所有的元素只保留2位小数
a3 = a2.round(2)

以上例子是相乘,其实相加、相减、相除也都是类似的。

数组与数组的计算:

  1. 结构相同的数组之间的运算:
a1 = np.arange(0,24).reshape((3,8))
a2 = np.random.randint(1,10,size=(3,8))
a3 = a1 + a2 #相减/相除/相乘都是可以的
print(a1)
print(a2)
print(a3)
  1. 与行数相同并且只有1列的数组之间的运算:
a1 = np.random.randint(10,20,size=(3,8)) #3行8列
a2 = np.random.randint(1,10,size=(3,1)) #3行1列
a3 = a1 - a2 #行数相同,且a2只有1列,能互相运算
print(a3)
  1. 与列数相同并且只有1行的数组之间的运算:
a1 = np.random.randint(10,20,size=(3,8)) #3行8列
a2 = np.random.randint(1,10,size=(1,8))
a3 = a1 - a2
print(a3)

广播原则:

ndarray广播机制的两条规则

如果
1. 两个数组的后缘维度(trailing dimension,即从末尾开始算起的维度)的轴长度相符
2. 或其中的一方的长度为1

则认为它们是广播兼容的。
广播会在缺失和(或)长度为1的维度上进行。

numpy.append

### 添加元素

numpy.append 函数在数组的末尾添加值。 追加操作会分配整个数组,并把原来的数组复制到新数组中

注意:
1. 插入的维度要保证所有数组的长度是相同的
2. 如果没有指定轴,数组会被扁平处理

### 插入元素

numpy.insert 函数在给定索引之前,沿给定轴在输入数组中插入值

如果未提供轴,则输入数组会被展开

### 删除元素

numpy.delete 函数返回从输入数组中删除指定子数组的新数组。 

如果未提供轴参数,则输入数组将展开。

### 数组变形reshape

numpy.reshape 函数可以在不改变数据的条件下修改形状,格式如下: numpy.reshape(arr, newshape, order='C')

- arr:要修改形状的数组
- newshape:整数或者整数数组,新的形状应当兼容原有形状
- order:'C' -- 按行,'F' -- 按列,'A' -- 原顺序,'k' -- 元素在内存中的出现顺序。

### 数组扁平处理

numpy.ndarray.flatten() 返回一份展开的数组拷贝,对拷贝所做的修改不会影响原始数组

numpy.ravel() 展平的数组元素,返回一个展开的数组引用,修改会影响原始数组。

数组(矩阵)转置和轴对换:

numpy中的数组其实就是线性代数中的矩阵。矩阵是可以进行转置的。ndarray有一个T属性,可以返回这个数组的转置的结果。示例代码如下:

a1 = np.arange(0,24).reshape((4,6))
a2 = a1.T
print(a2)

另外还有一个方法叫做transpose,这个方法返回的是一个View,也即修改返回值,会影响到原来数组。示例代码如下:

a1 = np.arange(0,24).reshape((4,6))
a2 = a1.transpose()

为什么要进行矩阵转置呢,有时候在做一些计算的时候需要用到。比如做矩阵的内积的时候。就必须将矩阵进行转置后再乘以之前的矩阵:

a1 = np.arange(0,24).reshape((4,6))
a2 = a1.T
print(a1.dot(a2))

dot()的使用

参考文档:https://docs.scipy.org/doc/numpy/reference/generated/numpy.dot.html

dot()返回的是两个数组的点积(dot product)

1.如果处理的是一维数组,则得到的是两数组的內积(顺便去补一下数学知识)

a=np.random.randint(0,8,size=(2,4))
b=np.random.randint(4,16,size=(4,2))
np.dot(a,b)

数组的转置

函数和方法method总览

这是个Numpy函数和方法分类排列目录。这些名字链接到Numpy示例,你可以看到这些函数起作用

创建数组

arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity,   
linspace, logspace, mgrid, ogrid, ones, ones_like, r , zeros, zeros_like

转化

astype, atleast 1d, atleast 2d, atleast 3d, mat

操作

array split, column stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, item,   
newaxis, ravel, repeat, reshape, resize, squeeze, swapaxes, take, transpose, vsplit, vstack

询问

all, any, nonzero, where

排序

argmax, argmin, argsort, max, min, ptp, searchsorted, sort

运算

choose, compress, cumprod, cumsum, inner, fill, imag, prod, put, putmask, real, sum

基本统计

cov, mean, std, var

基本线性代数

cross, dot, outer, svd, vdot

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1941099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里国际站运营工具 :一键提升你的全球竞争力!

在当今全球化的商业环境中,阿里巴巴国际站作为全球知名的B2B电子商务平台,为无数企业提供了一个展示产品、拓展国际市场的重要渠道。随着越来越多的企业加入到这个平台,如何在激烈的竞争中脱颖而出,成为了每个外贸人员必须面对的挑…

【BUG】已解决:ModuleNotFoundError: No module named ‘requests‘

ModuleNotFoundError: No module named ‘requests‘ 目录 ModuleNotFoundError: No module named ‘requests‘ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身&a…

java-selenium 截取界面验证码图片并对图片文本进行识别

参考链接 1、需要下载Tesseract工具并配置环境变量&#xff0c;步骤如下 Tesseract-OCR 下载安装和使用_tesseract-ocr下载-CSDN博客 2、需要在IDEA中导入tess4j 包&#xff1b;在pom.xml文件中输入如下内容 <!--导入Tesseract 用于识别验证码--><dependency>&l…

SpringSecurity通用权限管理系统

1、介绍 权限管理是所有后台系统都会涉及的一个重要组成部分&#xff0c;而权限管理的核心流程是相似的&#xff0c;如果每个后台单独开发一套权限管理系统&#xff0c;就是重复造轮子&#xff0c;是人力的极大浪费&#xff0c;本项目就是针对这个问题&#xff0c;提供了一套通…

堆的相关特点

一.建堆的两种方法 给定一个数组&#xff0c;其中数组里面的元素个数是n个如何能够把这个数组建立成为一个堆&#xff0c;今天探讨两种方法&#xff0c;分别是向上调整法和向下调整法&#xff0c;分别探讨他们的时间复杂度 向上调整法&#xff08;以小堆为例&#xff09; 回…

【好玩的经典游戏】Docker环境下部署赛车小游戏

【好玩的经典游戏】Docker环境下部署赛车小游戏 一、小游戏介绍1.1 小游戏简介1.2 项目预览二、本次实践介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 安装Docker环境3.2 检查Docker服务状态3.3 检查Docker版本3.4 检查docker compose 版本四、构建容器镜像4.1 下…

解决Visual studio内报错信息:MSB8036:找不到 Windows SDK 版本问题

问题描述&#xff1a; 找不到WindowsSDK版本&#xff0c;请安装所需版本的Windows SDK&#xff0c;或者在项目属性页中通过右键单击解决方案并选择“重定解决方案目标”来更改SDK版本。 首先&#xff0c;如果你尝试了以下两种方法&#xff1a; &#xff08;1&#xff09;重新…

深入理解Java 8的流式API:简化代码,提升效率

文章目录 深入理解Java 8的流式API&#xff1a;简化代码&#xff0c;提升效率一、流 Stream二、Int | Long | Double Stream三、收集器 Collectors 深入理解Java 8的流式API&#xff1a;简化代码&#xff0c;提升效率 Java 8引入了Stream API&#xff0c;它提供了一种新的抽象&…

String 和StringBuilder字符串操作快慢的举例比较

System.currentTimeMillis(); //当前时间与1970年1月1日午夜UTC之间的毫秒差。public class HelloWorld {public static void main(String[] args) {String s1 "";StringBuilder s2 new StringBuilder("");long time System.currentTimeMillis();long s…

Django Web框架~后台美化

1、执行命令 pip install django-simpleui 2、注册simpleui到项目中 3、访问http://127.0.0.1/admin/ 4、设置中文 5、收集admin静态文件 python manage.py collectstatic

Zookeeper入门篇,了解ZK存储特点

Zookeeper入门篇&#xff0c;了解ZK存储特点 前言一、为什么要用 Zookeeper&#xff1f;二、Zookeeper存储特色1. 树状结构2. 节点类型 三、存储位置1. 内存存储1. DataTree2. DataNode 2. 硬盘存储1. 事务日志2. 快照 前言 继上次说完 Zookeeper 的安装后&#xff0c;已经过去…

设计模式学习[2]---策略模式+简单工厂回顾

文章目录 前言1.简单工厂模式回顾2.策略模式3.策略模式简单工厂的结合总结 前言 上一篇讲到简单工厂模式。 在我的理解中工厂的存在就是&#xff0c;为了实例化对象。根据不同条件实例化不同的对象的作用。 这篇博客写的策略模式&#xff0c;可以说是把这个根据不同情况实例化…

pdf2docx - pdf 提取内容转 docx

文章目录 一、关于 pdf2docx主要功能限制 二、安装1、 PyPI2、从remote安装3、从源码安装4、卸载 三、转化 PDF例 1: convert all pages例 2: 转换指定页面例 3: multi-Processing例 4: 转换加密的pdf 四、提取表格五、命令行交互1、按页面范围2、按页码3、Multi-Processing 六…

使用Vue.js集成百度地图WebGL实现3D地图应用

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 使用Vue.js集成百度地图WebGL实现3D地图应用 应用场景介绍 本代码用于在Vue.js应用程序中集成百度地图WebGL&#xff0c;实现3D地图的可视化展示。它可以应用于各种场景&#xff0c;例如&#xff1a; 城市规…

助燃新质生产力,魔珐科技亮相IMC2024制造业数字科技大会展示有言AIGC视频工具价值

2024年7月19日&#xff0c;IMC2024第八届制造业数字科技大会在上海盛大开幕&#xff0c;本次大会以《向“智”而行》为主题&#xff0c;250智能制造行业数字化转型企业、行业领军者及实践者共聚一堂&#xff0c;共同助力企业增强技术“硬核力”&#xff0c;为新质生产力蓄势赋能…

【SpringBoot3】全局异常处理

【SpringBoot3】全局异常处理 一、全局异常处理器step1&#xff1a;创建收入数字的页面step2:创建控制器&#xff0c;计算两个整数相除step3:创建自定义异常处理器step5&#xff1a;创建给用提示的页面step6&#xff1a;测试输入&#xff08;10/0&#xff09; 二、BeanValidato…

TCP/IP网络模型详解

在计算机网络领域&#xff0c;网络模型通常指的是 OSI&#xff08;Open Systems Interconnection&#xff09;参考模型或 TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff09;模型。这些模型描述了网络中数据传输的层次结构&#xff0c;便于理解和…

ROS2从入门到精通2-3:详解机器人3D物理仿真Gazebo与案例分析

目录 0 专栏介绍1 什么是Gazebo?2 Gazebo架构2.1 Gazebo前后端2.2 Gazebo文件格式2.3 Gazebo环境变量3 Gazebo安装与基本界面4 搭建自己的地图4.1 编辑地图4.2 保存地图4.3 加载地图5 常见问题0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有…

【面试八股文】计算机操作系统

参考&#xff1a;大佬图解文章 → 小林coding 简介&#xff1a;之前在学习小林大佬的八股文时&#xff0c;摘录了一些个人认为比较重要的内容&#xff0c;方便后续自己复习。【持续更新ing ~&#x1f4af;】 注&#xff1a;加五角星标注的&#xff0c;是当前掌握不牢固的&…

WEB攻防-通用漏洞-SQL注入-MYSQL-union一般注入

前置知识 MySQL5.0以后存放一个默认数据库information_schemaschemata表存放该用户创建的所有库名&#xff0c;schemata. schema_name字段存放库名tables表存放该用户创建的所有库名和表明&#xff0c;tables.table_schema字段存放库名&#xff0c;tables.table_name存放表名co…