Python numpy中的ndarray介绍
作者:盆友圈的小可爱 发布时间:2022-11-06 19:17:59
在上一期python numpy 模块中对概述介绍了numpy 模块安装、使用方法、特点等入门知识。
numpy 模块是一个开源的第三方Python库,常用于科学和工程领域,是科学Python和PyData 生态系统的核心。
numpy 模块易学易用的特点,基本上覆盖了初学者到先进科学研究员的所有人群。
numpy 模块除了在matplotlib上应用,它还在
Pandas
、Scipy
、scikit-learn
等科学Python中。numpy 模块也包含多维数组和矩阵数据结构,它专门提供了具有n维数组对象的
ndarray
,以及对其进行有效操作的方法。numpy 模块也可用于对数组执行各种数学运算,提供高级数学函数库,以及数组和矩阵的操作。
众所周知,numpy 模块中数组对象是其核心功能,我们本期重点来学习numpy 数组相关内容,
1. 什么是 ndarray?
ndarray 概念
数组是numpy 模块核心数据结构。数组是值的网络,它的内部包含有原始数据、如何定义元素以及如何解释元素的信息。我们可以使用各种方式索引元素网格。
ndarray 是 numpy 模块中定义 n维数组类型。ndarray 可以描述同种类型project的集合。
同种数据类型:numpy 数组中的所有元素都是同种类类型,如int32,float64等
同大小内存空间:每个project占用相同大小内存块
同方式解释:每个project由object数据类型指定,,其中一个与每个数组相关联
可以N个整数对project进行索引
ndarray 内部关系
从数组中我们可以提取python对象表示的如索引是numpy 内置数组标量类型之一,我们可以通过使用数组标量来轻松操作复杂的数据排列。
通过以上ndarray 内部结构,我们可以看到 ndarray
主要由 dtype
、shape
、stride
组成
ndarray 指向内存映射地址的指针-data对象
ndarray 元素解释形象-dtype对象
ndarray 每个维度的元素之间的间隔-strides对象(tuple)
ndarray 对每个维度的数量和大小的描述-shape对象(tuple)
以上四个python
对象就可以在ndarray 中通过索引的方式找到指定位置的数据。
同时我们也调用np.array().flags
获取字节序、读写权限等信息,可知ndarray
底层是C和Fortran 实现的。
? C_CONTIGUOUS : True
? F_CONTIGUOUS : False
? OWNDATA : True
? WRITEABLE : True
? ALIGNED : True
? WRITEBACKIFCOPY : False
? UPDATEIFCOPY : False
2. ndarray 内存结构
ndarray 内存结构
我们通过numpy.array
方法创建一个2维数组
numpy.array(object, dtype = None, copy = True, order = None, subok = False, ndmin = 0)
import numpy as np
a = np.array([[1,2],[4,5],[7,8]])
print("dim:",a.ndim)
print("strides:",a.strides)
print("dtype:",a.dtype)
print("data:",a.data)
print("shape:",a.shape)
print(a)
通过array
对象调用ndarray
标量对象,可以获知ndarray
维度大小、元素类型、间隔等信息
通过上述图,我们可以知道 ndarray 内存主要划分为两部分:
raw data: 计算机一段连续的block,存储在C或者Fortran中的数组
metdata:有关原始数组数据的信息
3. ndarray vs list
ndarray 特点
ndarray
要求所有数据都是同种类型的每个数据占用空间一样
数组中存储的数据是一段连续的空间
list 特点
可以容纳不同数据类型
list 中只存放对象的引用,再通过引用找到具体的对象
对象的物理地址并不是连续的
所以,综上所述,ndarray
查找数据运行效率比list快,同时ndarray
存储的数据是连续的一段空间,对比list 对象物理地址分散的,ndarray 比 list 更省空间。
总结:
本期对numpy 模块核心之一的ndarray 数组对象内存原理、与python list对比等知识学习。
ndarray 里的所有的project元素都是同类型数据,并且存储空间是连续的。
不管查找数据,还是存储数据,数据计算等功能,都明显优于Python list。
来源:https://juejin.cn/post/7054576233807364132


猜你喜欢
- 开源的MySQL并不能取代非共享的私有数据库在企业中的应用,于是这些开源数据库的支持者们想把解决Web应用程序开发工具的可扩展性问题看作是获
- 一、软件测试大型软件系统的开发是一个很复杂的过程,其中因为人的因素而所产生的错误非常多,因此软件在开发过程必须要有相应的质量保证活动,而软件
- 将django语法和sql对应一下,希望对大家有所帮助查询单个列的值story.object.values_list("url&q
- 一。存储过程的创建和使用1.创建程序包,并在程序中创建存储过程create or replace PACKAG
- 前言 本篇章主要介绍二叉树的应用之一------二叉排序树,包括二叉排序树的定义、查找、插入、构造、删除及查找效率分析。1. 二叉排序树的
- 在实际使用numpy时,我们常常会使用numpy数组的-1维度和”:”用以调用numpy数组中的元素。也经常因为数组的维度而感到困惑。总体来
- Oracle是世界上用得最多的数据库之一,活动服务器网页(ASP)是一种被广泛用于创建 * 页的功能强大的服务器端脚本语言。许多ASP开发人
- 前言这篇文章介绍一下 递归,递归的本质是将原来的问题转化为更小的同一个问题,解决这些更小问题的过程。下面通过两个递归的例子帮助学习对递归的理
- 这几年来,我们这个行业一直都在谈用户体验,以用户为中心的设计。“用户体验”是指用户访问网站的界面、功能、相关信息的可读性、操作的方便性,交互
- Q1 :如何解压 rar 压缩包文件?A :Step1:检查是否有 rarfile 第三方库,若没有该模块,则需要进行安装 ;Step2:参
- 由于Rosenblatt感知器的局限性,对于非线性分类的效果不理想。为了对线性分类无法区分的数据进行分类,需要构建多层感知器结构对数据进行分
- Python 提供了多个图形开发界面的库。Tkinter就是其中之一。 Tkinter 模块(Tk 接口)是 Python 的标准 Tk G
- 从一个问题开始最近银行这个事情闹的比较厉害啊,很多储户的钱放在银行,就不翼而飞了,而银行还不管不问,说是用户的责任,打官司,用户还能输了,这
- 我就废话不多说啦!dpi=1 600×400dpi=21200×800dpi=31800×1200........dpi=21(21×600
- 在Python个人博客程序开发实例框架设计中,我们已经完成了 数据库设计、数据准备、模板架构、表单设计、视图函数设计、电子邮件支持 等总体设
- HTML 5 和 XHTML 2规范草稿公布以来,一直存在很大的争议。HTML 5是由包括Google、Mirosoft、Mozilla、O
- 思路:使用socket传输文件过程中,如果单次传输每次只能发送一部分数据,如果针对大文件,一次传输肯定是不行的,所以需要我们在传输的时候提前
- 二级联动在一般的网页中随处可见,一般是地址,比如点击浙江省,随后出现的是杭州市,嘉兴市;点击北京省出现的是朝阳,海淀,而不是出现杭州,嘉兴。
- 平时我们获取事件对象一般写法如下:function getEvent(event) { return e
- 如下所示:#coding:utf8import pandas as pdimport numpy as npfrom pandas impo