Python numpy中的ndarray介绍

目录
  • 1. 什么是 ndarray?
    • ndarray 概念
    • ndarray 内部关系
  • 2. ndarray 内存结构
    • ndarray 内存结构
  • 3. ndarray vs list
    • ndarray 特点
    • list 特点

在上一期python numpy 模块中对概述介绍了numpy 模块安装、使用方法、特点等入门知识。

  • numpy 模块是一个开源的第三方Python库,常用于科学和工程领域,是科学Python和PyData 生态系统的核心。
  • numpy 模块易学易用的特点,基本上覆盖了初学者到先进科学研究员的所有人群。
  • numpy 模块除了在matplotlib上应用,它还在PandasScipyscikit-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 主要由 dtypeshapestride组成

  • 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。

到此这篇关于Python numpy中的ndarray介绍的文章就介绍到这了,更多相关Python numpy-ndarray内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python Numpy 控制台完全输出ndarray的实现

    如下所示: import numpy as np np.set_printoptions(threshold=np.nan) print(ndarray) 当ndarray里面的存放的数据维度过大时,在控制台会出现不能将ndarray完全输出的情况,中间部分的结果会用省略号打印出来.这时就需要用到numpy里面的set_printoptions()方法. set_printoptions(precision=None, threshold=None, edgeitems=None, linewi

  • Python中Numpy ndarray的使用详解

    本文主讲Python中Numpy数组的类型.全0全1数组的生成.随机数组.数组操作.矩阵的简单运算.矩阵的数学运算. 尽管可以用python中list嵌套来模拟矩阵,但使用Numpy库更方便. 定义数组 >>> import numpy as np >>> m = np.array([[1,2,3], [2,3,4]]) #定义矩阵,int64 >>> m array([[1, 2, 3], [2, 3, 4]]) >>> m = n

  • python NumPy ndarray二维数组 按照行列求平均实例

    我就废话不多说了,直接上代码吧! c = np.array([[1, 2, 3, 4], [4, 5, 6, 7], [7, 8, 9, 10]]) print(c.mean(axis=1))#行 print(c.mean(axis=0))#列 输出为: [ 2.5 5.5 8.5] [ 4. 5. 6. 7.] 以上这篇python NumPy ndarray二维数组 按照行列求平均实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • Python numpy中的ndarray介绍

    目录 1. 什么是 ndarray? ndarray 概念 ndarray 内部关系 2. ndarray 内存结构 ndarray 内存结构 3. ndarray vs list ndarray 特点 list 特点 在上一期python numpy 模块中对概述介绍了numpy 模块安装.使用方法.特点等入门知识. numpy 模块是一个开源的第三方Python库,常用于科学和工程领域,是科学Python和PyData 生态系统的核心. numpy 模块易学易用的特点,基本上覆盖了初学者到先

  • Python Numpy中ndarray的常见操作

    目录 前言 0 Numpy基础知识 1 ndarray的属性 1.1 输出ndarray的常见属性 2 ndarray的数据类型 3 修改ndarray的形状和数据类型 3.1 查看和修改ndarray的形状 3.2 查看和修改ndarray的数据类型 4 ndarray数组创建 5 ndarray数组的常见运算 6 ndarray数组的索引.切片和迭代 7 ndarray数组的堆叠.拆分 前言 NumPy(Numerical Python)是Python的一种开源的数值计算扩展.这种工具可用来

  • 详解Python NumPy中矩阵和通用函数的使用

    目录 一.创建矩阵 二.从已有矩阵创建新矩阵 三.通用函数 四.算术运算 在NumPy中,矩阵是 ndarray 的子类,与数学概念中的矩阵一样,NumPy中的矩阵也是二维的,可以使用 mat . matrix 以及 bmat 函数来创建矩阵. 一.创建矩阵 mat 函数创建矩阵时,若输入已为 matrix 或 ndarray 对象,则不会为它们创建副本. 因此,调用 mat() 函数和调用 matrix(data, copy=False) 等价. 1) 在创建矩阵的专用字符串中,矩阵的行与行之

  • numpy中实现ndarray数组返回符合特定条件的索引方法

    在numpy的ndarray类型中,似乎没有直接返回特定索引的方法,我只找到了where函数,但是where函数对于寻找某个特定值对应的索引很有用,对于返回一定区间内值的索引不是很有效,至少我没有弄明白应该如何操作尴尬.下面先说一下where函数的用法吧. (1)where函数的使用场景: 例如现在我生成了一个数组: import numpy as np arr=np.array([1,1,1,134,45,3,46,45,65,3,23424,234,12,12,3,546,1,2]) 现在a

  • Python Numpy中数据的常用保存与读取方法

    在经常性读取大量的数值文件时(比如深度学习训练数据),可以考虑现将数据存储为Numpy格式,然后直接使用Numpy去读取,速度相比为转化前快很多. 下面就常用的保存数据到二进制文件和保存数据到文本文件进行介绍: 1.保存为二进制文件(.npy/.npz) numpy.save 保存一个数组到一个二进制的文件中,保存格式是.npy 参数介绍 numpy.save(file, arr, allow_pickle=True, fix_imports=True) file:文件名/文件路径 arr:要存

  • python numpy中对ndarry按照index增删改查

    在numpy中的ndarry是一个数组,因此index就是位置下标,注意下标是从0开始 增加:在插入时使用np.insert(),在末尾添加时使用np.append() 删除:需要使用np.delete() 修改:直接指定下标 查找:直接指定下标 示例代码: import numpy as np if __name__ == '__main__':     array = np.array(["a", "b", "c", "d"

  • Python Numpy中数组的集合操作详解

    我们知道两个 set 对象之间,可以取交集.并集.差集.对称差集,举个例子: s1 = {1, 2, 3} s2 = {2, 3, 4} """ &: 交集 |: 并集  -: 差集 ^: 对称差集 """ # 以下几种方式是等价的 # 但是一般我们都会使用操作符来进行处理,因为比较方便 print(s1 & s1) print(s1.intersection(s2)) print(set.intersection(s1, s2)

  • Python numpy中np.random.seed()的详细用法实例

    目录 引言 E.G.实验 E.G.随机数种子参数的作用 补充:一个随机种子在代码中只作用一次,只作用于其定义位置的下一次随机数生成 总结 引言 在进行机器学习和深度学习中,我们会经常用到np.random.seed(),利用随机数种子,使得每次生成的随机数相同. numpy.randn.randn(d0,d1,...,dn) randn函数根据给定维度生成大概率在(-2.58~+2.58)之间的数据 randn函数返回一个或者一组样本,具有标准正态分布 dn表示每个维度 返回值为指定维度的arr

  • Python NumPy随机抽模块介绍及方法

    目录 1. 随机数 2. 随机抽样 3. 正态分布 4. 伪随机数的深度思考 1. 随机数 np.random.random()是最常用的随机数生成函数,该函数生成的随机数随机均匀分布于[0, 1)区间.如果不提供参数,np.random.random()函数返回一个浮点型随机数.np.random.random()函数还可以接受一个整型或元组参数,用于指定返回的浮点型随机数数组的结构(shape).也有很多人习惯使用np.random.rand()函数生成随机数,其功能和np.random.r

  • 浅谈python numpy中nonzero()的用法

    nonzero函数返回非零元素的目录. 返回值为元组, 两个值分别为两个维度, 包含了相应维度上非零元素的目录值. import numpy as np A = np.mat([[0,1,2,3,4,3,2,1,0],[0,1,2,3,4,5,6,7,0]]) x = A.nonzero() #取出矩阵中的非零元素的坐标 print x #输出是一个元组,两个维度.一一对应, #返回非零元素在矩阵中的位置,前一个列表存放非零行坐标,后一个列表存放非零元素列坐标 #(array([0, 0, 0,

随机推荐