NumPy 的使用

news2024/11/23 18:35:48

NumPy(Numerical Python)是Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,同时也针对数组运算提供大量的数学函数库。

    NumPy 的前身 Numeric 最早由 Jim Hugunin 与其他协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其他扩展而开发了 NumPy。同时,NumPy 作为开放源代码由许多协作者共同维护开发。

    NumPy 是一个运行速度非常快的数学函数库,主要用于数组计算,包括以下几部分。

    (1)一个强大的 N 维数组对象 ndarray。

    (2)广播功能函数。

    (3)整合 C/C++/Fortran 代码的工具。

    (4)线性代数、傅里叶变换、随机数生成。

1.NumPy 安装

在学习 NumPy 之前需要先安装,安装 NumPy 最简单的方法就是使用 pip 工具。pip 安装命令如下。

python -m pip install --user numpy scipy matplotlib ipython jupyter pandas sympy nose

安装完成后,还要测试是否安装成功。可以在Pycharm中新建一个 py 文件并输入以下代码并运行,如果出现如图 1 所示的运行结果,则证明安装成功。

from numpy import *
    
print(eye(4))

图1

 2.NumPy ndarray 对象

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,并以 0 下标为开始进行集合中元素的索引。ndarray 内部由以下内容组成。

(1)一个指向数据(内存或内存映射文件中的一块数据)的指针。

(2)数据类型或 dtype,描述在数组中固定大小值的格子。

(3)一个表示数组形状(shape)的元组,即表示各维度大小的元组。

(4)一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要“跨过” 的字节数。

ndarray 的内部结构如图 2 所示,跨度可以是负数,这样会使数组在内存中后向移动,切片中 obj[::-1] 或 obj[:,::-1] 就是如此。创建一个 ndarray,只需调用 NumPy 的 array 函数即可。

图2

相关语法格式如下。

numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)

 参数说明如下:

(1)object:数组或嵌套的数列。

(2)dtype:数组元素的数据类型,可选参数。

(3)copy:对象是否需要复制,可选参数。

(4)order:创建数组的样式,C 为行方向,F 为列方向,A 为任意方向(默认)。

(5)subok:默认返回一个与基类类型一致的数组。

(6)ndmin:指定生成数组的最小维度。 接下来通过以下实例帮助读者更好地理解相关内容。

首先来看一下如何创建一维数组,示例代码如下:

import numpy as np
    
a = np.array([1, 2, 3])
print(a)

运行代码输出结果:

[1 2 3]

这里在调用array方法的时候,传递的object参数为一个list,其中list中的值可以不是同一个数据类型,例如下面的代码:

import numpy as np

a = np.array(["1", "2", 3])
print(a)

运行代码输出结果:

['1' '2' '3']

接着再看下二维数组怎么创建,示例代码如下:

import numpy as np
    
a = np.array([[1, 2], [3, 4]])
print(a)

运行代码输出结果:

[[1 2]
 [3 4]]

除此之外,还可以通过 ndmin 参数来控制,生成一个指定维度的数组,例如要生成一个5 维度的数组,示例代码如下:

import numpy as np
a = np.array([1, 2, 3, 4, 5], ndmin=5)
print(a)

运行代码输出结果:

[[[[[1 2 3 4 5]]]]]

3.NumPy数据类型

NumPy 支持的数据类型比 Python 内置的类型要多,基本上可以和 C 语言的数据类型对应上, 其中部分类型对应为 Python 内置的类型。如下表格 列举了常用 NumPy 的基本类型。

名称

描述

bool_

布尔型数据类型(True或False)

int_

默认的整数类型(类似于 C 语言中的 long,一般是int32 或 int64)

intc

与C语言的 int 类型一样,一般是 int32 或 int 64

intp

用于索引的整数类型(类似于 C语言的ssize_t,一般是 int32 或 int64)

int8

字节(-128~127)

int16

整数(-32768~32767)

int32

整数(-2147483648~2147483647)

int64

整数(-9223372036854775808~9223372036854775807)

uint8

无符号整数(0~255)

uint16

无符号整数(0~65535)

uint32

无符号整数(0~4294967295)

uint64

无符号整数(0~18446744073709551615)

float__

float64 类型的简写

float16_

半精度浮点数,包括1 个符号位、5 个指数位、10 个尾数位

float32

单精度浮点数,包括1 个符号位、8 个指数位、23 个尾数位

float64

双精度浮点数,包括1 个符号位、11 个指数位、52 个尾数位

complex_

complex128 类型的简写,即 128 位复数

complex64

复数,表示双 32 位浮点数(实数部分和虚数部分)

complex128

复数,表示双 64 位浮点数(实数部分和虚数部分)

NumPy 的数值类型实际上是 dtype 对象的实例,并对应唯一的字符,包括 np.bool_、np.int32、 np.float32 等。

数据类型对象(dtype)用来描述与数组对应的内存区域是如何使用的,主要表现在以下几个方面。

(1)数据的类型(整数,浮点数或 Python 对象)。

(2)数据的大小(例如, 整数使用多少个字节存储)。

(3)数据的字节顺序(小端法或大端法)。

(4)在结构化类型的情况下,字段的名称、每个字段的数据类型和每个字段所取内存块的部分。

(5)如果数据类型是子数组,则为它的形状和数据类型。

1.使用标量类型

示例代码如下:

import numpy as np
dt = np.dtype(np.int32)
print(dt)

运行输出结果:

int32

2.int8, int16, int32, int64 4 种数据类型可以使用字符串 'i1', 'i2','i4','i8' 代替

示例代码如下:

import numpy as np
dt = np.dtype('i4')
print(dt)
int32

3.字节顺序标注

示例代码如下:

import numpy as np
dt = np.dtype('>i4')
print(dt)

运行输出结果:

>i4

4.创建结构化数据类型

示例代码如下:

import numpy as np
dt = np.dtype([('age',np.int8)])
print(dt)

运行输出结果:

[('age', 'i1')]

5.将数据类型应用于 ndarray 对象

示例代码如下:

import numpy as np
dt = np.dtype([('age',np.int8)])
a = np.array([(10,),(20,),(30,)], dtype=dt)
print(a)

运行输出结果:

[(10,) (20,) (30,)]

6.类型字段名可用于存取实际的 age 列

示例代码如下:

import numpy as np
student = np.dtype([('name','S20'), ('age', 'i1'), ('marks', 'f4')])
print(student)

运行输出结果:

[('name', 'S20'), ('age', 'i1'), ('marks', '<f4')

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

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

相关文章

百万千万爆款视频的脚本是怎么写出来的?两套模板教你做同款

那些百万千万爆款视频的脚本是怎么写出来的&#xff1f;两套模板教你做同款。 每天都能刷到百万赞的短视频&#xff0c;看看自己的视频点赞量&#xff0c;失落是一种感觉&#xff0c;其实你也可以做出优秀的爆款文案。 今天给大家介绍两种短视频脚本模板&#xff0c;大家可以…

idea手动创建干净的maven项目,很简单

大家好&#xff0c;今天我们分享使用idea开发工具创建干净的maven项目 这是Maven的官网&#xff1a; 点一下就可以 首先&#xff0c;我们来了解一下什么是Maven&#xff0c;就是说关于Maven这个东西你要知道的是 1.Maven是一个跨平台&#xff08;在很多平台上都可以使用&…

B4:Unity制作Moba类游戏——小兵AI系统

若想取得战争的胜利&#xff0c;必先控好兵线。 ———— 麦克阿瑟 是时候让敌人经历一下我们兵线的洗礼。 ———— 拿破仑 在LOL对局中&#xff0c;职业选手对兵线的控制可以说是达到了“运筹帷幄之中,决胜千里之外”。其实普通玩家只要控好兵线&#xff0c;在对线中一样可以…

Java Servlet详解(补充,极其重要)

✅作者简介&#xff1a;热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏&#xff1a;JAVA开发者…

SwiftUI 中列表行(List Row)展开和收起无动画或动画诡异的解决

文章目录 问题现象问题分析1. 为什么 List 行展开与收起没有动画效果?2. 第一种解决方法3. 另一种巧妙的解决总结结束语问题现象 SwiftUI 中展开(expand)和收起(collapse)列表行(List Row)是一个常见的操作,不过默认来说这样的操作不会有动画效果: 如上图所示,我们为…

粒子滤波算法(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

CpG ODN——艾美捷ODN 1826 (TLRGRADE)说明书

艾美捷CpG ODN系列——ODN 1826 (TLRGRADE)&#xff1a;具有硫代磷酸酯骨架的CpG寡脱氧核苷酸&#xff08;B型&#xff09;。小鼠TLR9&#xff08;Toll样受体9&#xff09;的特异性配体。 艾美捷CpG ODN 丨ODN 1826 (TLRGRADE)化学性质&#xff1a; 备选名称&#xff1a;CpG-B…

Suspense组件

先上官网&#xff1a;https://cn.vuejs.org/guide/built-ins/suspense.html 注意一下 <Suspense> 是一项实验性功能。它不一定会最终成为稳定功能&#xff0c;并且在稳定之前相关 API 也可能会发生变化。 在使用了之后在浏览器控制台会有如下打印&#xff0c;至少目前是…

【大数据】有关zookeeper的问题

如图&#xff0c;启动zookeeper失败&#xff0c;输入 zkServer.sh start-foreground 查看失败原因 Invalid config&#xff0c;我得知是配置文件出了问题&#xff0c;但是检查配置文件没有发现错误 最终在配置文件末尾配置参数结尾发现了未删除的空格 将三个节点配置文件中的…

C/C++ 和 Java的编译运行机制比较 个人理解

计算机程序语言按程序的执行方式可分为编译型语言和解释性语言。 编译型语言是指使用专用的编译器&#xff0c;针对某操作系统将高级语言源代码一次性地翻译成可被该系统硬件执行的机器码(包括机器指令和操作数&#xff09;&#xff0c;并包装成该系统所能识别的可执行程序的格…

同事开源我的微服务深度实践笔记到 GitHub,短短 3 天竟吸粉 1W+

说Spring成就了Java&#xff0c;Spring是Java程序员必修课之一&#xff0c;应该没人反对吧&#xff1f;前几年面试最常问的且可以顺利拿到高薪的技能是Spring&#xff0c;随着Spring体系的壮大&#xff0c;除非你在简历上添加Spring Boot和Spring Cloud的技能&#xff0c;才可以…

Kubernetes——Debug Static Pod

1. 问题背景 注意&#xff0c;我这里的Static Pod并非Kubernetes的Static Pod&#xff0c;而是需要把想要Debug的程序放到Delve环境中重新打包一个镜像。因为还有另外一种场景&#xff0c;那就是我们需要不重启Running Pod&#xff0c;为了和这种方式区分&#xff0c;才以此为…

彻底卸载并重装Anaconda环境与Python的方法

本文介绍在Windows平台下&#xff0c;彻底删除Anaconda环境与其自带Python版本&#xff0c;并进行重新安装的方法。 最近&#xff0c;由于原有Anaconda环境中的部分第三方库出现了冲突的情况&#xff0c;且基于“Anaconda Prompt (anaconda3)”也无法升级Anaconda与相关库了&am…

《超新星纪元》

《超新星纪元》 关于作者 刘慈欣&#xff0c;髙级工程师&#xff0c;科普作家&#xff0c;被誉 为"中国当代科幻第一人"。自上世纪90年代开始&#xff0c;他一边在发电厂担任计算机工程师&#xff0c;一边利用业余时间出版了13本小说集&#xff0c;连续数年获得中国…

这是一篇讲解用户行为分析的推荐书单和总结

写在前面 技术文延迟了 本来计划参加活动的还有一篇&#xff0c;应该是一篇技术翻译文&#xff0c;但是那篇文章太难了&#xff0c;看我过我以往文章的同学&#xff0c;应该能理解&#xff0c;我的文章很少有3000字数以下的&#xff0c;而且如果不是来自谷歌&#xff08;主要…

深蓝学院-多传感器融合定位课程-第9章-基于图优化的建图方法

专栏文章: 深蓝学院-多传感器融合定位课程-第1章-概述_goldqiu的博客-CSDN博客 深蓝学院-多传感器融合定位课程-第2章-3D激光里程计I_goldqiu的博客-CSDN博客 深蓝学院-多传感器融合定位课程-第3章-3D激光里程计II_goldqiu的博客-CSDN博客 深蓝学院-多传感器融合定位课程-第…

2022品牌出海:日本网红营销白皮书

日本作为世界第三大经济体&#xff0c;同时也是世界第四大电子商务市场&#xff0c;亚洲第二大消费市场&#xff0c;其经济水平和消费能力都非常出色。对出海企业来说&#xff0c;日本是一个非常有吸引力的市场。日本的网红营销市场也非常成熟&#xff0c;在疫情的影响下&#…

java设计模式之原型模式(prototype Pattern)

原型模式主要在于对象的克隆&#xff0c;所以也叫克隆模式 其实就是利用java中的Object对象中的clone方法实现一个对象的克隆。此方法需要注意的是&#xff0c;一个对象想要实现克隆&#xff0c;就必须实现一个标志性接口Cloneable 现在先来说一下浅克隆 这玩意也叫表皮克隆&…

【前端开发学习】1.前端引入和HTML标签

文章目录1.快速开发网站2. 浏览器能识别的标签2.1 编码&#xff08;head&#xff09;2.2 Title&#xff08;head&#xff09;2.3 标题&#xff08;body&#xff09;2.4 div 和 span&#xff08;body&#xff09;2.5 超链接&#xff08;body&#xff09;2.6 图片&#xff08;bod…

基于微信小程序的居民疫情服务系统springboot框架-计算机毕业设计

项目介绍 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;居民疫情服务系统小程序被用户普遍使用&#xff0c;为…