numpy概述

  1. Numerical Python,数值的Python,补充了Python语言所欠缺的数值计算能力。
  2. Numpy是其它数据分析及机器学习库的底层库。
  3. Numpy完全标准C语言实现,运行效率充分优化。
  4. Numpy开源免费。

numpy历史

  1. 1995年,Numeric,Python语言数值计算扩充。
  2. 2001年,Scipy->Numarray,多维数组运算。
  3. 2005年,Numeric+Numarray->Numpy。
  4. 2006年,Numpy脱离Scipy成为独立的项目。

numpy的核心:多维数组

  1. 代码简洁:减少Python代码中的循环。
  2. 底层实现:厚内核©+薄接口(Python),保证性能。

ndarray 数组

用np.ndarray类的对象表示n维数组

123
import numpy as npary = np.array([1, 2, 3, 4, 5, 6])print(type(ary)) # <class 'numpy.ndarray'>

内存中的ndarray对象

元数据(metadata)

存储对目标数组的描述信息,如:ndim、shape、dtype、data等。

实际数据

完整的数组数据

将实际数据与元数据分开存放,一方面提高了内存空间的使用效率,另一方面减少对实际数据的访问频率,提高性能。

数组对象的特点

  1. Numpy数组是同质数组,即所有元素的数据类型必须相同
  2. Numpy数组的下标从0开始,最后一个元素的下标为数组长度减1,同python的列表。

数组对象的创建

np.array(任何可被解释为Numpy数组的逻辑结构)

123
import numpy as npa = np.array([1, 2, 3, 4, 5, 6])print(a) # [1 2 3 4 5 6]

np.arange(起始值(0),终止值,步长(1))

12345
import numpy as npa = np.arange(0, 5, 1)print(a) # [0 1 2 3 4]b = np.arange(0, 10, 2)print(b) # [0 2 4 6 8]

np.zeros(数组元素个数, dtype='类型')

123
import numpy as npa = np.zeros(10)print(a) # [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

np.ones(数组元素个数, dtype='类型')

123
import numpy as npa = np.ones(10)print(a) # [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]

对象属性的基本操作

数组的维度np.ndarray.shape

123456789
import numpy as npary = np.array([1, 2, 3, 4, 5, 6])print(type(ary), ary, ary.shape)#二维数组ary = np.array([    [1,2,3,4],    [5,6,7,8]])print(type(ary), ary, ary.shape) # <class 'numpy.ndarray'> [[1 2 3 4] [5 6 7 8]] (2, 4)

元素的类型:np.ndarray.dtype

123456789
import numpy as npary = np.array([1, 2, 3, 4, 5, 6])print(type(ary), ary, ary.dtype) # <class 'numpy.ndarray'> [1 2 3 4 5 6] int64#转换ary元素的类型b = ary.astype(float)print(type(b), b, b.dtype) # <class 'numpy.ndarray'> [1. 2. 3. 4. 5. 6.] float64#转换ary元素的类型c = ary.astype(str)print(type(c), c, c.dtype) # <class 'numpy.ndarray'> ['1' '2' '3' '4' '5' '6'] <U21

数组元素的个数:np.ndarray.size

1234567
import numpy as npary = np.array([    [1,2,3,4],    [5,6,7,8]])#观察维度,size,len的区别print(ary.shape, ary.size, len(ary)) # (2, 4) 8 2

数组元素索引(下标)

数组对象[…, 页号, 行号, 列号]

下标从0开始,到数组len-1结束。

1234567891011121314
import numpy as npa = np.array([[[1, 2],               [3, 4]],              [[5, 6],               [7, 8]]])print(a, a.shape)print(a[0])print(a[0][0])print(a[0][0][0])print(a[0, 0, 0])for i in range(a.shape[0]):    for j in range(a.shape[1]):        for k in range(a.shape[2]):            print(a[i, j, k])

对象属性操作详解

Numpy的内部基本数据类型

类型名 类型表示符
布尔型 bool_
有符号整数型 int8(-128~127) / int16 / int32 / int64
无符号整数型 uint8(0~255) / uint16 / uint32 / uint64
浮点型 float16 / float32 / float64
复数型 complex64 / complex128
字串型 str_,每个字符用32位Unicode编码表示
日期类型 datetime64

自定义复合类型:list of tuples

1234567891011121314151617181920212223242526272829303132333435363738394041
# 自定义复合类型import numpy as np

data=[   ('zs', [90, 80, 85], 15),   ('ls', [92, 81, 83], 16),   ('ww', [95, 85, 95], 15)]#第一种设置dtype的方式a = np.array(data, dtype='U3, 3int32, int32')print(a)print(a[0]['f0'], ":", a[1]['f1'])print("=====================================")#第二种设置dtype的方式b = np.array(data, dtype=[('name', 'str_', 2),                    ('scores', 'int32', 3),                    ('age', 'int32', 1)])print(b[0]['name'], ":", b[0]['scores'])print("=====================================")

#第三种设置dtype的方式c = np.array(data, dtype={'names': ['name', 'scores', 'ages'],                    'formats': ['U3', '3int32', 'int32']})print(c[0]['name'], ":", c[0]['scores'], ":", c.itemsize)print("=====================================")

#第四种设置dtype的方式  d = np.array(data, dtype={'name': ('U3', 0),                    'scores': ('3int32', 16),                    'age': ('int32', 28)})print(d[0]['names'], d[0]['scores'], d.itemsize)

print("=====================================")

#测试日期类型数组f = np.array(['2011', '2012-01-01', '2013-01-01 01:01:01','2011-02-01'])f = f.astype('M8[D]')f = f.astype('i4')print(f[3]-f[0])

f.astype('bool')

类型字符码

类型 字符码
np.bool_ ?
np.int8/16/32/64 i1 / i2 / i4 / i8
np.uint8/16/32/64 u1 / u2 / u4 / u8
np.float/16/32/64 f2 / f4 / f8
np.complex64/128 c8 / c16
np.str_ U
np.datetime64 M8[Y] M8[M] M8[D] M8[h] M8[m] M8[s]

数组维度操作

视图变维(数据共享): reshape() 与 ravel()

123456789
import numpy as npa = np.arange(1, 9)print(a)     # [1 2 3 4 5 6 7 8]b = a.reshape(2, 4)   #视图变维  : 变为2行4列的二维数组print(b)c = b.reshape(2, 2, 2) #视图变维    变为2页2行2列的三维数组print(c)d = c.ravel()    #视图变维   变为1维数组print(d)

复制变维(数据独立):flatten()

1234
e = c.flatten()print(e)a += 10print(a, e, sep='\n')

就地变维:直接改变原数组对象的维度,不返回新数组

1234
a.shape = (2, 4)print(a)a.resize(2, 2, 2)print(a)

数组索引操作

12345
# 数组对象切片的参数设置与列表切面参数类似#  步长+:默认切从首到尾#  步长-:默认切从尾到首数组对象[起始位置:终止位置:步长, ...]# 默认位置步长:1
123456789101112131415
import numpy as npa = np.arange(1, 10)print(a)  # 1 2 3 4 5 6 7 8 9print(a[:3])  # 1 2 3print(a[3:6])   # 4 5 6print(a[6:])  # 7 8 9print(a[::-1])  # 9 8 7 6 5 4 3 2 1print(a[:-4:-1])  # 9 8 7print(a[-4:-7:-1])  # 6 5 4print(a[-7::-1])  # 3 2 1print(a[::])  # 1 2 3 4 5 6 7 8 9print(a[:])  # 1 2 3 4 5 6 7 8 9print(a[::3])  # 1 4 7print(a[1::3])  # 2 5 8print(a[2::3])  # 3 6 9

多维数组的切片操作

12345678910
import numpy as npa = np.arange(1, 28)a.resize(3,3,3)print(a)#切出1页 print(a[1, :, :])     #切出所有页的1行print(a[:, 1, :])      #切出0页的1行1列print(a[0, :, 1])     

ndarray数组的掩码操作:之后的要学到的pandas包也经常使用

1234
import numpy as npa = np.arange(1, 10)mask = [True, False,True, False,True, False,True, False,True]print(a[mask])

多维数组的组合与拆分

垂直方向操作:vstack vsplit

1234567
import numpy as npa = np.arange(1, 7).reshape(2, 3)b = np.arange(7, 13).reshape(2, 3)# 垂直方向完成组合操作,生成新数组c = np.vstack((a, b))# 垂直方向完成拆分操作,生成两个数组d, e = np.vsplit(c, 2)

水平方向操作:hstack hsplit

1234567
import numpy as npa = np.arange(1, 7).reshape(2, 3)b = np.arange(7, 13).reshape(2, 3)# 水平方向完成组合操作,生成新数组 c = np.hstack((a, b))# 水平方向完成拆分操作,生成两个数组d, e = np.hsplit(c, 2)

深度方向操作:dstack dsplit(3 维)

1234567
import numpy as npa = np.arange(1, 7).reshape(2, 3)b = np.arange(7, 13).reshape(2, 3)# 深度方向(3维)完成组合操作,生成新数组i = np.dstack((a, b))# 深度方向(3维)完成拆分操作,生成两个数组k, l = np.dsplit(i, 2)

长度不等的数组组合:pad+vstack/hstack/dstack

123456789
import numpy as npa = np.array([1,2,3,4,5])b = np.array([1,2,3,4])# 填充b数组使其长度与a相同b = np.pad(b, pad_width=(0, 1), mode='constant', constant_values=-1)print(b)# 垂直方向完成组合操作,生成新数组c = np.vstack((a, b))print(c)

多维数组组合与拆分的相关函数:concatenate split

1234567891011
# 通过axis作为关键字参数指定组合的方向,取值如下:# 若待组合的数组都是二维数组:#   0: 垂直方向组合#    1: 水平方向组合# 若待组合的数组都是三维数组:#   0: 垂直方向组合#    1: 水平方向组合#    2: 深度方向组合np.concatenate((a, b), axis=0)# 通过给出的数组与要拆分的份数,按照某个方向进行拆分,axis的取值同上np.split(c, 2, axis=0)

简单的一维数组组合方案:row_stack colomn_stack

12345678
a = np.arange(1,9)      #[1, 2, 3, 4, 5, 6, 7, 8]b = np.arange(9,17)     #[9,10,11,12,13,14,15,16]#把两个数组摞在一起成两行c = np.row_stack((a, b))print(c)#把两个数组组合在一起成两列d = np.column_stack((a, b))print(d)

注:均分,份数需可整除。

类的其他属性

  • shape - 维度
  • dtype - 元素类型
  • size - 元素数量
  • ndim - 维数,len(shape)
  • itemsize - 元素字节数
  • nbytes - 总字节数 = size x itemsize
  • real - 复数数组的实部数组
  • imag - 复数数组的虚部数组
  • T - 数组对象的转置视图
  • flat - 扁平迭代器
123456789101112131415
import numpy as npa = np.array([[1 + 1j, 2 + 4j, 3 + 7j],              [4 + 2j, 5 + 5j, 6 + 8j],              [7 + 3j, 8 + 6j, 9 + 9j]])print(a.shape)print(a.dtype)print(a.ndim)print(a.size)print(a.itemsize)print(a.nbytes)print(a.real, a.imag, sep='\n')print(a.T)print([elem for elem in a.flat])b = a.tolist()print(b)

http://www.taodudu.cc/news/show-3625855.html

相关文章:

  • numpy中的ndarray方法和属性详解
  • python中ndarray是什么意思_什么是Numpy的ndarray
  • ndarray 求和_Numpy ndarray 创建与简单的数学运算
  • 详解numpy库ndarray对象的切片操作(三帽号规则)
  • NumPy ndarray对象
  • Python_Numpy库的ndarray对象的属性有哪些?如何获取它们的值?
  • python中ndarray对象_numpy基础——ndarray对象
  • 详解 Numpy.ndarray
  • Python的Numpy库的ndarray对象常用构造方法及初始化方法
  • Rust机器学习之ndarray
  • ndarray基础操作
  • ndarray
  • 数据结构3 :ndarray
  • NumPy学习笔记(一)—— ndarray数组
  • 使用ndarray
  • Numpy:数组对象(Ndarray)的定义和创建
  • mxnet快速入门教程值NDArray(一)
  • Python--ndarray 常用属性详解
  • Python: NumPy中的多维数组ndarray
  • 【matlab教程】12、已知函数表达式画函数图
  • 求多元函数表达式
  • 函数声明和函数表达式的区别:
  • 已知 方程 用 matlab 求表达式,已知自变量,因变量和函数表达式,可以用matlab求出函数表达式中的未知参数吗...
  • matlab 列出具体表达式,MATLAB中如何实现输出一个函数表达式
  • 逻辑函数表达式的形式
  • 关于函数表达式的标识符/函数名
  • 函数声明、 函数表达式 与立即调用函数表达式的比较
  • javascript函数声明和函数表达式
  • matlab显示函数表达式_MATLAB在绘图时的用法——线形图
  • 函数声明与函数表达式的区别

Numpy 中的 Ndarray相关推荐

  1. 数据分析-----NumPy中的ndarray数组

    目录 Numpy概述 Python中的数组 NumPy中的ndarray ndarray中的数据类型 ndarray多维数组属性 ndarray的创建 NumPy 切片和索引 NumPy 线性代数 总 ...

  2. 【Python进阶】你真的明白NumPy中的ndarray吗?

    欢迎来到专栏<Python进阶>.在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件.数据的处理,Python各种好用的库如NumPy.Scipy.Matplotl ...

  3. 总结numpy中的ndarray,非常齐全

    公众号后台回复"图书",了解更多号主新书内容 来源:Python碎片 作者:binn.wong numpy(Numerical Python)是一个开源的Python数据科学计算库 ...

  4. numpy中的ndarray与array的区别、不同

    翻译自stackoverflow上的回答 https://stackoverflow.com/questions/15879315/what-is-the-difference-between-nda ...

  5. numpy中的ndarray方法和属性

    原文地址 NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是 ...

  6. numpy中的ndarray方法和属性详解

    NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...

  7. python四维数组代表图像_【Python进阶】你真的明白NumPy中的ndarray吗?

    欢迎来到专栏<Python进阶>.在这个专栏中,我们会讲述Python的各种进阶操作,包括Python对文件.数据的处理,Python各种好用的库如NumPy.Scipy.Matplotl ...

  8. numpy 查找 返回索引_numpy中实现ndarray数组返回符合特定条件的索引方法

    下面为大家分享一篇numpy中实现ndarray数组返回符合特定条件的索引方法,具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 在numpy的ndarray类型中,似乎没有直接返回特定索引的方 ...

  9. python中文读音ndarray-numpy中的ndarray方法和属性详解

    NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...

最新文章

  1. linux常用快捷命令(不断更新)
  2. caffe 的命令行训练与测试
  3. [论文摘录] Classification of SOA Contract Specification Languages(ICWS, 2008), 第二部分
  4. 谈谈你对MVC和三层架构的理解?(月薪三万的面试题)
  5. Java GUI中实现文件拷贝
  6. android关于控件中setTag(key,Object)的设置的相关问题
  7. html语言文本框的符号,如何将文本框中的值作为HTML字符串提交?
  8. 这个世界本来就是残酷的,所以你不能怪C++向你展示了世界的本质!
  9. tpl_form_field_category_2level() - 二级分类选择器说明
  10. 多行省略号不显示的问题
  11. JavaScript内置对象→对象、系统函数、Date日期对象、String字符串对象、Math对象、Number数字对象、Object对象、Boolean对象、Error对象
  12. 简单的避免idea自动导入 *
  13. ucore_os_lab lab1 report
  14. CrazyTalk Animator 3 for Mac破解版永久激活方法附破解补丁
  15. 冰柱图分析:学习笔记
  16. 10.32/10.33 rsync通过服务同步 10.34 linux系统日志 10.35 scre
  17. 如何设置,QQ邮箱新版界面
  18. ContentType所有类型对比
  19. mail在linux的端口,linux 上mailx通过465端口发送邮件
  20. dsf5.0没登录显示登录弹框

热门文章

  1. HTML鼠标悬停显示隐藏div,JQ实现鼠标悬停显示或隐藏DIV层
  2. Flask 学习-47.Flask-RESTX 自定义响应内容marshal_with
  3. 干货 | PCB拼板,那几条很讲究的规则!
  4. 验证6种信用卡卡号的代码
  5. Agile PLM Weblogic 异常解决
  6. layui-dtree 重设根节点parentId的值
  7. python入门记录_Python 数据应用基础记录
  8. 灯火阑珊的伤感短篇日志分享:我的伤,你永远不懂
  9. linuxprobe配置网卡信息配置yum软件仓库报错
  10. karma 测试框架的前世今生