数组对象

NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,从0 开始进行集合中元素的索引;ndarray 对象是用于存放同类型元素的多维数组,其中的每个元素在内存中都有相同存储大小的区域。

ndarray 内部由以下内容组成:

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针。
  • 数据类型或(dtype),描述在数组中的固定大小值的格子。
  • 一个表示数组形状(shape)的元组,表示各维度大小的元组。
  • 一个跨度元组(stride),其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数。

ndarray 的内部结构:



跨度可以是负数,这样会使数组在内存中后向移动,切片中 obj[::-1]obj[:,::-1] 就是如此。

创建一个 ndarray 只需调用 NumPy 的 array 函数即可:

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

参数说明:

名称 描述
object 数组或嵌套的数列
dtype 数组元素的数据类型,可选
copy 对象是否需要复制,可选
order 创建数组的样式,C为行方向,F为列方向,A为任意方向(默认)
subok 默认返回一个与基类类型一致的数组
ndmin 指定生成数组的最小维度

基本创建操作

In [1]: import numpy as np  #导入模块

#np.array()用于创建一维或多维数组
In [2]: x = np.array([1,4,2,5,3])
In [3]: x
Out[3]: array([1, 4, 2, 5, 3]) #Numpy要求数组必须包含同一类型的数据,如果类型不一致,将会向上转换(整型会转换成浮点型)
In [5]: np.array([3.14,4,2,3])
Out[5]: array([3.14, 4. , 2. , 3. ]) #dtype用于指定数据类型
In [6]: np.array([1,2,3,4],dtype='float64')
Out[6]: array([1., 2., 3., 4.]) #嵌套列表构成多维数组
In [7]: np.array([range(i,i+3) for i in [2,4,6]])
Out[7]:
array([[2, 3, 4],
[4, 5, 6],
[6, 7, 8]]) #numpy.asarray(a, dtype = None, order = None) 从已有的数组创建数组
In [16]: x = [1,2,3]
In [17]: a = np.asarray(x[:2]) In [18]: a
Out[18]: array([1, 2]) #创建一个长度为10的整数型数组,数组的值都是0
#numpy.zeros(shape, dtype = float, order = 'C或F')
In [2]: np.zeros(10,dtype=int)
Out[2]: array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) #创建一个3 * 5 的浮点型数组,数组的值都是1.
#numpy.ones(shape, dtype = None, order = 'C或F')
In [3]: np.ones((3,5),dtype=float)
Out[3]:
array([[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.],
[1., 1., 1., 1., 1.]]) #创建一个3 * 5 的浮点型数组,数组的值都是3.14
In [4]: np.full((3,5),3.14)
Out[4]:
array([[3.14, 3.14, 3.14, 3.14, 3.14],
[3.14, 3.14, 3.14, 3.14, 3.14],
[3.14, 3.14, 3.14, 3.14, 3.14]]) #创建一个线性序列数组,从0开始,20结束,步长为2 [与内置的range函数类似]
In [5]: np.arange(0,20,2)
Out[5]: array([ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18]) #创建一个3*3的,在0~1均匀分布的随机数组成的数组
In [7]: np.random.normal(0,1,(3,3))
Out[7]:
array([[ 0.97341698, 0.88933442, 0.22194868],
[-1.71214362, 0.45802193, -1.2897651 ],
[-0.09084611, 1.18721238, -1.16374604]]) #创建一个3*3的,在[0,10)随机整数组成的数组
In [8]: np.random.randint(0,10,(3,3))
Out[8]:
array([[9, 4, 5],
[7, 6, 1],
[0, 6, 0]]) #创建一个3*3的单位矩阵
In [9]: np.eye(3)
Out[9]:
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]]) #创建一个由3个整数型组成的未初始化的数组
#数组的值是内存空间中的任意值
#numpy.empty(shape, dtype = float, order = 'C或F')
In [10]: np.empty(3)
Out[10]: array([1., 1., 1.]) #复数
In [2]: a = np.array([1,2,3],dtype = complex)
In [3]: a
Out[3]: array([1.+0.j, 2.+0.j, 3.+0.j]) #创建一个对数数列,等比
#np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
In [12]: a = np.logspace(0,9,num=10)
In [13]: a
Out[13]:
array([1.e+00, 1.e+01, 1.e+02, 1.e+03, 1.e+04, 1.e+05, 1.e+06, 1.e+07,
1.e+08, 1.e+09]) In [14]: b = np.logspace(0,9,10,base=2)
In [15]: b
Out[15]: array([ 1., 2., 4., 8., 16., 32., 64., 128., 256., 512.]) #创建一个在0~1之间均匀取5个值的数组,等差
#np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
In [6]: np.linspace(0,1,5)
Out[6]: array([0. , 0.25, 0.5 , 0.75, 1. ]) #numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0) 接受 buffer 输入参数,以流的形式读入转化成 ndarray 对象。
#buffer 是字符串的时候,Python3 默认 str 是 Unicode 类型,所以要转成 bytestring 在原 str 前加上 b。
In [21]: s = b'Hello'
In [22]: a = np.frombuffer(s,dtype='S1')
In [25]: a
Out[25]: array([b'H', b'e', b'l', b'l', b'o'], dtype='|S1') #numpy.fromiter(iterable, dtype, count=-1)从可迭代对象中建立 ndarray 对象,返回一维数组。
In [26]: list = range(5)
In [27]: it = iter(list) In [28]: x = np.fromiter(it,dtype=float)
In [29]: x
Out[29]: array([0., 1., 2., 3., 4.])

Numpy的数组对象的更多相关文章

  1. Numpy数组对象的操作-索引机制、切片和迭代方法

    前几篇博文我写了数组创建和数据运算,现在我们就来看一下数组对象的操作方法.使用索引和切片的方法选择元素,还有如何数组的迭代方法. 一.索引机制 1.一维数组 In [1]: a = np.arange ...

  2. Python数据分析学习(二):Numpy数组对象基础

    1.1数组对象基础 .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { bord ...

  3. Numpy学习一:ndarray数组对象

    NumPy是Python的一个高性能科学计算和数据分析基础库,提供了功能强大的多维数组对象ndarray.jupyter notebook快速执行代码的快捷键:鼠标点击选中要指定的代码框,Shift ...

  4. numpy 数组对象

    numpy 数组对象NumPy中的ndarray是一个多维数组对象,该对象由两部分组成:实际的数据,描述这些数据的元数据# eg_v1 import numpy as np a = np.arange ...

  5. Numpy的ndarry:一种多维数组对象

    Numpy的ndarry:一种多维数组对象 Numpy最重要的一个特点就是其N维数组对象(即ndarry),该对象是一个快速而灵活的大数据集容器.你可以利用这种数组对整块数据执行一些数学运算,其语法跟 ...

  6. [转]Numpy中矩阵对象(matrix)

    numpy模块中的矩阵对象为numpy.matrix,包括矩阵数据的处理,矩阵的计算,以及基本的统计功能,转置,可逆性等等,包括对复数的处理,均在matrix对象中. class numpy.matr ...

  7. NumPy:数组计算

    一.MumPy:数组计算 1.NumPy是高性能科学计算和数据分析的基础包.它是pandas等其他各种工具的基础.2.NumPy的主要功能: ndarray,一个多维数组结构,高效且节省空间 无需循环 ...

  8. NumPy 迭代数组

    NumPy 迭代数组 NumPy 迭代器对象 numpy.nditer 提供了一种灵活访问一个或者多个数组元素的方式. 迭代器最基本的任务的可以完成对数组元素的访问. 接下来我们使用 arange() ...

  9. 一、Numpy基础--数组

    (一)Numpy数组对象 Numpy中的nadrray是一个多维数组对象,该对象由两部分组成: 实际的数据 描述这些数据的元数据 大部分的数组操作仅仅修改元数据部分,而不改变底层的实际数据. 数组的数 ...

  10. Numpy用于数组数据的存储和读取

    Python的Numpy模块可用于存储和读取数据: 1.将一个数组存储为二进制文件 Numpy.save:将一个数组以.npy的格式保存为二进制文件 调用格式:numpy.save(file, arr ...

随机推荐

  1. 【LeetCode二叉树#09】路径总和I+II,以及求根节点到叶节点数字之和(回溯回溯,还是™的回溯)

    路径总和 力扣题目链接(opens new window) 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的 ...

  2. 【Azure Redis】Azure Redis添加了内部虚拟网络后,其他区域的主机通过虚拟网络对等互连访问失败

    问题描述 跨区域无法访问Azure Redis服务, Redis 启用了Network并设置在一个VNET中,现在客户端部署在另一个区域数据中心中,两个数据中心区域使用VNET Peer(对等互连)访 ...

  3. 【Azure Redis 缓存】使用Azure Redis服务时候,如突然遇见异常,遇见命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?

    问题描述 使用Azure Redis服务时,如突然遇见异常,命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?看是否有进行平台的维护呢 ...

  4. CentOS 设置系统时间与网络时间同步

    CentOS 设置系统时间与网络时间同步 一.Linux的时间分为(两种) System Clock(系统时间) 指当前Linux Kernel中的时间 Real Time Clock (硬件时间,简 ...

  5. Jmeter json断言的使用

    1 添加方式:取样器右键->添加->断言->JSON断言 作用:使用JSON表达式提取实际数据与预期进行比较   2首先我们来了解下断言组件的各个功能: Asset JSON Pat ...

  6. Linux 系统进程管理

    Linux 系统进程管理 目录 Linux 系统进程管理 一.进程的概述 1.1 什么是进程? 1.2 进程和程序的区别 1.3 进程的生命周期 1.4 进程的运行过程 二. 静态显示进程状态-ps ...

  7. Git修改最近一次提交的日志信息

    一.问题由来 当前自己所在的项目组中,每次发完一个版本后,就需要创建个人新版本的git提交凭证,其实就是系统自动 生成的一串编码,如果没有这个凭证,代码是提交不了的,这是公司制定的开发规范之一.这两天 ...

  8. iview 表单验证 爆红后,有某些组件现隐,爆红和必填会错位,解决方案 组件上加key

    iview 表单验证 爆红后,有某些组件现隐,爆红和必填会错位,解决方案 组件上加key

  9. react start 后 url 后面不带/ 解决思路

    > navigator@0.1.0 dev H:\2020home\giteez\navigator > node scripts/start.js Compiled successful ...

  10. 2.String类能被继承吗

    2.String类能被继承吗 不可以,因为String类有final修饰符,而final修饰的类是不能被继承的. 拓展 String的底层是一个用private和final修饰的char数组.fina ...