2、NumPy ndarray:多维数组对象基础

目录

1. ndarray 对象简介

2. 创建 ndarray

从现有数据创建

使用内置函数创建

使用范围和间隔创建数组

使用随机函数创建数组

3. 数组属性和数据类型

常用属性

数据类型转换


1. ndarray 对象简介

NumPy 的 ndarray 是一个多维数组对象,它支持快速的、向量化的数组操作。与 Python 原生的列表相比,ndarray 提供了更加丰富的操作和更高效的存储。

核心特性

  • 同质性ndarray 中的所有元素必须是相同数据类型。
  • 多维性:可以是任意维度的数据结构,如向量(1维)、矩阵(2维)或更高维数据。
  • 高效性:NumPy 在内存中使用连续块存储数据,优化了缓存的使用,提高了计算性能。

2. 创建 ndarray

NumPy 提供了多种方式来创建 ndarray 对象。

从现有数据创建

直接将 Python 列表或元组转换为 ndarray

import numpy as np# 从列表创建
list_array = np.array([1, 2, 3, 4, 5])# 从多维列表创建
multi_list_array = np.array([[1, 2], [3, 4]])# 从元组创建
tuple_array = np.array((1, 2, 3, 4, 5))# 从多维元组创建
multi_tuple_array = np.array(((1, 2), (3, 4)))

使用内置函数创建

NumPy 有许多内置函数来创建具有特定形状和数据的数组。

# 创建全为 0 的数组
zeros_array = np.zeros((3, 4))# 创建全为 1 的数组
ones_array = np.ones((2, 3))# 创建一个给定形状的没有初始化的数组(其内容为内存中的随机值)
empty_array = np.empty((2, 2))# 创建一个给定形状和类型的数组,用 fill_value 填充
full_array = np.full((3, 3), fill_value=5)# 创建一个给定长度的单位矩阵
eye_array = np.eye(4)# 创建一个对角线为指定值的方阵
diag_array = np.diag([10, 20, 30, 40])

使用范围和间隔创建数组

有一些函数可以根据数字范围创建数组:

# 创建一个范围内数字的数组
arange_array = np.arange(10)  # 类似于 Python 的 range,但生成的是数组# 创建一个在指定范围内均匀间隔的数字数组
linspace_array = np.linspace(0, 1, num=5)# 创建一个在对数刻度上均匀间隔的数字数组
logspace_array = np.logspace(0, 1, num=5, base=10.0)

使用随机函数创建数组

NumPy 的随机模块包含了创建随机数数组的方法:

# 创建一个给定形状的随机数数组,其中的数值在 0 到 1 之间
random_array = np.random.rand(2, 3)# 创建一个给定形状的随机整数数组
int_random_array = np.random.randint(low=0, high=10, size=(4, 4))# 创建一个符合正态分布的随机数数组
normal_random_array = np.random.randn(3, 3)

3. 数组属性和数据类型

常用属性

shape:返回一个元组,表示数组的维度。

import numpy as np 
arr = np.array([[1, 2, 3], [4, 5, 6]]) 
print(arr.shape) # 输出 (2, 3)

dtype:返回数组中元素的数据类型。

import numpy as np 
arr = np.array([1, 2, 3]) 
print(arr.dtype) # 输出 int64

ndim:返回数组的维度数量。

import numpy as np 
arr = np.array([[1, 2, 3], [4, 5, 6]]) 
print(arr.ndim) # 输出 2

size:返回数组中元素的总数。

import numpy as np 
arr = np.array([[1, 2, 3], [4, 5, 6]]) 
print(arr.size) # 输出 6

itemsize:返回数组中每个元素的字节大小。

import numpy as np 
arr = np.array([1, 2, 3]) 
print(arr.itemsize) # 输出 8 (对于int64类型)

nbytes:返回数组中所有元素占用的总字节数。

import numpy as np 
arr = np.array([1, 2, 3]) 
print(arr.nbytes) # 输出 24 (对于int64类型)

数据类型转换

基本数值类型

  • np.int8np.int16np.int32np.int64:分别对应 8、16、32、64 位的整数类型。
  • np.uint8np.uint16np.uint32np.uint64:分别对应 8、16、32、64 位的无符号整数类型。
  • np.float16np.float32np.float64:分别对应 16、32、64 位的浮点数类型。
  • np.complex64np.complex128:分别对应 64、128 位的复数类型,其中实部和虚部都是浮点数。

其他类型

  • np.object:表示 Python 对象类型。
  • np.string_:表示固定长度的字符串类型。
  • np.unicode_:表示固定长度的 Unicode 类型。
  • np.bool_:表示布尔类型。

        在 NumPy 中,您可以在创建数组时指定数据类型,也可以使用 astype() 方法将一个数组从一种类型转换成另一种类型。

在创建数组时指定数据类型

import numpy as np 
arr = np.array([1, 2, 3, 4], dtype=np.float32) 
print(arr.dtype) # 输出: float32

使用 astype() 转换数据类型

arr = np.array([1.5, 2.5, 3.5, 4.5]) 
# 将浮点数组转换为整数数组 
int_arr = arr.astype(np.int32) 
print(int_arr.dtype) # 输出: int32

astype() 方法总是创建一个新的数组(一个数据类型改变了的数组的拷贝),即使你将数据类型转换成了当前数组的类型。

注意事项

        在进行数据类型转换时,需要注意数据的溢出和精度损失。例如,如果你将一个浮点数转换为整数,小数部分将会被截断。如果你将一个大的整数转换为较小的整数类型,可能会因为溢出而得到意料之外的结果。同样,将浮点数转换为低精度的浮点数可能会导致精度损失。

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

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

相关文章

adb wifi 远程调试 安卓手机 命令

使用adb wifi 模式调试需要满足以下前提条件: 手机 和 PC 需要在同一局域网下。手机需要开启开发者模式,然后打开 USB 调试模式。 具体操作步骤如下: 将安卓手机通过 USB 线连接到 PC。(连接的时候,会弹出请求&#x…

零花钱也能设计精美网页!推荐几个免费设计素材站点!

UI设计师最怕什么? 没有创意,没有灵感,没有思路! 在哪里可以得到idea?别担心,往下看! 你知道网络有多大,你想要什么吗?今天,我想和大家分享一些宝藏网页设…

解决flask中jinja2插值变量变成字符串的办法

今天在通过使用{{ variable_name }}这种方式插入html内容时,发现变量内容到了页面中全部变成了字符串, python代码: return render_template(FilePath.file_path_to_page,md_contenthtml_content # 返回html内容 )html代码中插入&#xff1…

【IAP】FreeRTOS多线程环境下调用NVIC_SystemReset()系统复位函数出现问题

衔接 上篇 调好写入Flash失败后,又出现新问题: 由BOOT跳APP再跳APP,在升级接受升级文件过程中,突然出现系统复位,而且出现位置和时间都是随机的。 定位问题 尝试改RTOS空间大小 本以为是FreeRTOS空间给小了,尝试加大还…

最简单爱心的解析

首先你需要了解爱心代码在直角坐标系的方程 数学知识&#xff1a;x 属于 -1.5 ~ 1.5 y 属于 -1 ~ 1.5 和 高中所学的线性规划 请看代码 #include <math.h> #include <stdlib.h> #include <Windows.h> #include <stdio.h> int main() { …

MySQL中varchar(100)和Oracle 中varchar2(100)

MySQL中的VARCHAR(100)和Oracle中的VARCHAR2(100)虽然在概念上相似&#xff0c;但是在细节上存在差异&#xff0c;这些差异体现在存储方式、性能优化、字符集处理等方面。 MySQL中VARCHAR(100)和Oracle中的VARCHAR2(100) MySQL中的VARCHAR(100) 在MySQL中&#xff0c;VARCH…

【REST2SQL】10 REST2SQL操作指南

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 【RE…

谭浩强C语言程序设计习题-循环结构程序设计

最大公约数与最小公倍数 //辗转相除法求公约公倍 #include <stdio.h>int gcd(int a, int b) {return (a % b 0) ? b : gcd(b, a % b); }int main() {int m, n;scanf("%d %d", &m, &n); int ans gcd(m, n);printf("%d %d\n", ans, m * n…

ESP系列入门教程(四)——之MQTT通信实现设备反控【分别附上 ESP32 + ESP8266 的具体代码】

ESP系列入门教程<四> 概要技术名词简介● ESP系列简介● MQTT简介 硬件连接实现&#xff08;同教程2&#xff0c;没有变化&#xff09;代码实现●Demo&#xff1a;通过MQTT进行开关灯反控○ ESP8266代码○ ESP32代码 特别鸣谢 概要 最近在跟着几个大佬的教学视频做项目。…

02--数据定义语言DDL

1、数据定义语言DDL 1.1 操作数据库-DDL 创建数据库 create database 数据库名称; 创建数据库&#xff0c;并指定字符集 create database 数据库名称 character set 字符集名; 查询所有数据库的名称 show databases; 查询某个数据库的字符集:查询某个数据库的创建语句及字…

Raft算法

内容出自 : https://www.bilibili.com/video/BV1eL411578r/?spm_id_from333.337.search-card.all.click raft具备良好的容错能力&#xff0c;能够在系统出现复杂的故障时依旧能够保证数据的一致性 能够继续对外提供服务 在raft协议中&#xff0c;分布式系统的每个节点有三个…

Qemu 之安装(源码安装)

Qemu 之安装 Qemu 有两种安装方式&#xff1a; apt 下载二进制文件&#xff0c;可以直接用&#xff0c;但是换版本、卸载等比较麻烦源码编译安装&#xff0c;需要一定的配置&#xff0c;但是自由度比较高 这里主要介绍源码编译安装的方式&#xff1a; 0、安装依赖 这部分参…

AboutAndroid 多语种适配框架,兼容高版本,适配第三方库语种

语种切换框架 项目地址&#xff1a;Github 可以扫码下载 Demo 进行演示或者测试&#xff0c;如果扫码下载不了的&#xff0c;点击此处可直接下载 集成步骤 如果你的项目 Gradle 配置是在 7.0 以下&#xff0c;需要在 build.gradle 文件中加入 allprojects {repositories {…

微服务介绍

背景 微服务是什么?杜克大学教授DanAriely说过一段非常出名的话&#xff0c;用来表述Big Data的发展现状。我觉得把这句话放到微服务身上也极其贴切。 Micro-services is like teenage sex: Everyone talks about it, nobody really knows how to do it, everyo ne thinks ev…

excel(vab)删除空行

删除第一、二、三列位空的所有行&#xff08;8000)行范围以内 代码如下&#xff1a; Sub Macro1()Dim hang As Integer For hang 8000 To 1 Step -1If Sheet1.Cells(hang, 1) "" And Sheet1.Cells(hang, 2) "" And Sheet1.Cells(hang, 3) "&quo…

系统性学习vue-vue中的ajax

vue中的ajax 配置代理常用发送Ajax请求方式跨域方式一方式二 vue-resource插槽默认插槽具名插槽作用域插槽 配置代理 常用发送Ajax请求方式 xhr new XMLHttpRequest() 在真正开发中不常用&#xff0c;比较麻烦jQuery 封装了xhraxios 封装了xhr 与jQuery相比优势是&#xff1a…

怎样才能找到合适的产品说明书模板 方法献上

制作一份专业而吸引人的产品手册对于企业来说至关重要。然而&#xff0c;对于许多企业和个人而言&#xff0c;制作产品手册可能是一个挑战&#xff0c;因为需要一定的设计和排版能力。为了帮助大家更轻松地制作出优质的产品手册&#xff0c;下面将向大家推荐三款优秀的产品手册…

大物小练-判断题题解

一、判断题 1.检验电荷受到的电场力F方向就是电场强度E的方向。&#xff08; B&#xff09; A对 B错 解释&#xff1a;场强E的切线方向才和受力F的方向相同 2.电容器电容的大小与导体的形状、相对位置、其间的电介质有关&#xff0c;与其所带的电荷量无关。A A对 B错 解释…

Ovtio不同版本下载

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…

2024年汉字小达人区级选拔备考——附加题:汉字和国学常识

上海的孩子们已经率先开启了悠长的寒假生活。在寒假期间&#xff0c;除了完成寒假生活、学校安排和要求外&#xff0c;还可以做些什么呢&#xff1f;不妨来为2024年汉字小达人做些准备吧&#xff01;每天花个15分钟左右&#xff0c;背一背、做一做&#xff0c;轻松掌握汉字小达…