Numpy学习笔记(二)

时间:2022-09-26 11:56:27

(1)NumPy - 切片和索引

l  ndarray对象中的元素遵循基于零的索引。 有三种可用的索引方法类型: 字段访问,基本切片和高级索引。

l  基本切片 Python 中基本切片概念到 n 维的扩展。切片只是返回一个观图。

l  如果一个ndarray是非元组序列,数据类型为整数或布尔值的ndarray,或者至少一个元素为序列对象的元组,我们就能够用它来索引ndarray。高级索引始终返回数据的副本。 有两种类型的高级索引:整数和布尔值。

整数索引实例

import numpy as np 
x = np.array([[1,  2],  [3,  4],  [5,  6]]) 
y = x[[0,1,2],  [0,1,0]]  
print y

输出如下:[1  4  5]

布尔索引实例

import numpy as np

a = np.array([np.nan,  1,2,np.nan,3,4,5])

print a[~np.isnan(a)]

输出如下[ 1.   2.   3.   4.   5.]

(2)NumPy广播

广播是指 NumPy 在算术运算期间处理不同形状的数组的能力。

如果两个阵列具有完全相同的形状,则这些操作被无缝执行。如果两个数组的维数不相同,则元素到元素的操作是不可能的。  然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。 较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。

如果满足以下规则,可以进行广播

  • ndim较小的数组会在前面追加一个长度为 1 的维度。
  • 输出数组的每个维度的大小是输入数组该维度大小的最大值。
  • 如果输入在每个维度中的大小与输出大小匹配,或其值正好为 1,则在计算中可它。
  • 如果输入的某个维度大小为 1,则该维度中的第一个数据元素将用于该维度的所有计算。

如果上述规则产生有效结果,并且满足以下条件之一,那么数组被称为可广播的

  • 数组拥有相同形状。
  • 数组拥有相同的维数,每个维度拥有相同长度,或者长度为 1。
  • 数组拥有极少的维度,可以在其前面追加长度为 1 的维度,使上述条件成立。

(3)NumPy - 数组上的迭代

  • NumPy 包包含一个迭代器对象numpy.nditer。 它是一个有效的多维迭代器对象,可以用于在数组上进行迭代。 数组的每个元素可使用 Python 的标准Iterator接口来访问。
  • nditer对象有另一个可选参数op_flags。 其默认值为只读,但可以设置为读写或只写模式。 这将允许使用此迭代器修改数组元素。nditer类的构造器拥有flags参数,它可以接受下列值:

序号         参数及描述

1.      c_index 可以跟踪 C 顺序的索引

2.      f_index 可以跟踪 Fortran 顺序的索引

3.      multi-index 每次迭代可以跟踪一种索引类型

4.      external_loop 给出的值是具有多个值的一维数组,而不是零维数组

如果两个数组是可广播的,nditer组合对象能够同时迭代它们。 假设数组a具有维度 3X4,并且存在维度为 1X4 的另一个数组b,则使用以下类型的迭代器(数组b被广播到a的大小)。

(4)NumPy - 数组操作

修改形状

  • numpy.reshape不改变数据的条件下修改形状:numpy.reshape(arr, newshape, order')
  • numpy.ndarray.flat该函数返回数组上的一维迭代器,行为类似 Python 内建的迭代器。
  • numpy.ndarray.flatten该函数返回折叠为一维的数组副本:ndarray.flatten(order),其中:order:'C' — 按行,'F' — 按列,'A' — 原顺序,'k' — 元素在内存中的出现顺序
  • numpy.ravel这个函数返回展开的一维数组,并且按需生成副本。返回的数组和输入数组拥有相同数据类型:numpy.ravel(a, order)

翻转操作

  • numpy.transpose翻转给定数组的维度。如果可能的话它会返回一个视图。函数接受下列参数:numpy.transpose(arr, axes)
  • numpy.ndarray.T该函数属于ndarray类,行为类似于numpy.transpose
  • numpy.rollaxis该函数向后滚动特定的轴,直到一个特定位置。这个函数接受三个参数:numpy.rollaxis(arr, axis, start)
  • numpy.swapaxes该函数交换数组的两个轴。numpy.swapaxes(arr, axis1, axis2)

修改维度

  • broadcast 此功能模仿广播机制。 它返回一个对象,该对象封装了将一个数组广播到另一个数组的结果。
  • numpy.broadcast_to此函数将数组广播到新形状。 它在原始数组上返回只读视图。 它通常不连续。 如果新形状不符合 NumPy 的广播规则,该函数可能会抛出ValueError。numpy.broadcast_to(array, shape, subok)
  • numpy.expand_dims函数通过在指定位置插入新的轴来扩展数组形状:numpy.expand_dims(arr, axis)
  • numpy.squeeze函数从给定数组的形状中删除一维条目: numpy.squeeze(arr, axis)

数组的连接

  • numpy.concatenate数组的连接是指连接。 此函数用于沿指定轴连接相同形状的两个或多个数组。 该函数接受以下参数。numpy.concatenate((a1, a2, ...), axis)
  • numpy.stack此函数沿新轴连接数组序列:numpy.stack(arrays, axis)
  • numpy.vstacknumpy.stack函数的变体,通过堆叠来生成竖直的单个数组
  • numpy.hstacknumpy.stack函数的变体,通过堆叠来生成水平的单个数组

数组分割

  • numpy.split该函数沿特定的轴将数组分割为子数组。numpy.split(ary, indices_or_sections, axis)
  • numpy.hsplit是split()函数的特例,其中轴为 1 表示水平分割,无论输入数组的维度是什么。
  • numpy.vsplit是split()函数的特例,其中轴为 0 表示竖直分割,无论输入数组的维度是什么。

添加/删除元素

  • numpy.resize此函数返回指定大小的新数组。 如果新大小大于原始大小,则包含原始数组中的元素的重复副本。numpy.resize(arr, shape)
  • numpy.append此函数在输入数组的末尾添加值。 附加操作不是原地的,而是分配新的数组。 此外,输入数组的维度必须匹配否则将生成ValueError。numpy.append(arr, values, axis)
  • numpy.insert此函数在给定索引之前,沿给定轴在输入数组中插入值。 如果值的类型转换为要插入,则它与输入数组不同。 插入没有原地的,函数会返回一个新数组。 此外,如果未提供轴,则输入数组会被展开。numpy.insert(arr, obj, values, axis)
  • numpy.delete此函数返回从输入数组中删除指定子数组的新数组。与insert()函数的情况一样,如果未提供轴参数,则输入数组将展开。Numpy.delete(arr, obj, axis)
  • numpy.unique 此函数返回输入数组中的去重元素数组。 该函数能够返回一个元组,包含去重数组和相关索引的数组。 索引的性质取决于函数调用中返回参数的类型。numpy.unique(arr, return_index, return_inverse, return_counts)

Numpy学习笔记(二)的更多相关文章

  1. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  2. NumPy学习笔记 一

    NumPy学习笔记 一 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  3. numpy 学习笔记

    numpy 学习笔记 导入 numpy 包 import numpy as np 声明 ndarray 的几种方法 方法一,从list中创建 l = [[1,2,3], [4,5,6], [7,8,9 ...

  4. Numpy学习笔记(下篇)

    目录 Numpy学习笔记(下篇) 一.Numpy数组的合并与分割操作 1.合并操作 2.分割操作 二.Numpy中的矩阵运算 1.Universal Function 2.矩阵运算 3.向量和矩阵运算 ...

  5. Numpy学习笔记(上篇)

    目录 Numpy学习笔记(上篇) 一.Jupyter Notebook的基本使用 二.Jpuyter Notebook的魔法命令 1.%run 2.%timeit & %%timeit 3.% ...

  6. tensorflow学习笔记二:入门基础 好教程 可用

    http://www.cnblogs.com/denny402/p/5852083.html tensorflow学习笔记二:入门基础   TensorFlow用张量这种数据结构来表示所有的数据.用一 ...

  7. WPF的Binding学习笔记&lpar;二&rpar;

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  8. AJax 学习笔记二&lpar;onreadystatechange的作用&rpar;

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

  9. &lbrack;Firefly引擎&rsqb;&lbrack;学习笔记二&rsqb;&lbrack;已完结&rsqb;卡牌游戏开发模型的设计

    源地址:http://bbs.9miao.com/thread-44603-1-1.html 在此补充一下Socket的验证机制:socket登陆验证.会采用session会话超时的机制做心跳接口验证 ...

  10. JMX学习笔记&lpar;二&rpar;-Notification

    Notification通知,也可理解为消息,有通知,必然有发送通知的广播,JMX这里采用了一种订阅的方式,类似于观察者模式,注册一个观察者到广播里,当有通知时,广播通过调用观察者,逐一通知. 这里写 ...

随机推荐

  1. Arduino下LCD1602综合探究(上)——1602的两种驱动方式,如何使LCD的控制编程变得更简单

    一.前言: LCD ( Liquid Crystal Display 的简称)液晶显示器,已经逐渐替代CRT成为主流的显示设备之一,因此也成为了单片机发烧友绕不过的话题之一:而LCD1602更是很多单 ...

  2. ArcGIS图层和要素的过滤显示

    ArcGIS可以设置动态地图服务(ArcGISDynamicMapServiceLayer)显示哪些图层,也可以设置每个图层根据某个属性字段的某些条件来进行过滤显示. 1.设置显示的图层 主要是通过A ...

  3. java SE 常用的排序算法

    java程序员会用到的经典排序算法实现 常用的排序算法(以下代码包含的)有以下五类: A.插入排序(直接插入排序.希尔排序) B.交换排序(冒泡排序.快速排序) C.选择排序(直接选择排序.堆排序) ...

  4. IOS线程的一些总结

    主线程的作用 (在主线程中才能设置) 显示/刷新UI界面 处理UI事件(比如点击事件.滚动事件.拖拽事件): 主线程的使用注意 别将比较耗时的操作放到主线程中. 耗时操作会卡住主线程.影响体验. [N ...

  5. FastReport使用二——二维码

    以下内容在FastReport Designer 中测试通过,如下图所示: 在使用FastReport Designer创建一维吗也就是一般普通的条码时,设置其Barcode属性为Code128 (建 ...

  6. Ubuntu系统启动时waiting for network

    最近在使用Ubuntu时启动经常会遇到等待网络配置, 每次等待时间都很长,要几分钟,于是在网上看看其他大牛怎么解决该问题. 有些解决方法中有提到删除 网卡硬件信息文件/etc/udev/rules.d ...

  7. 如何自定义iOS中的控件

    本文译自 How to build a custom control in iOS .大家要是有什么问题,可以直接在 twitter 上联系原作者,当然也可以在最后的评论中回复我. 在开发过程中,有时 ...

  8. 【转】论文、会议、期刊评价&vert;Indicate paper&comma; conference&comma; Journal

    转自“浙江大学计算机学院软硬件协同设计实验室”:http://multicore.zju.edu.cn/fatlab/Indicate-paper.htm 1           体系结构领域,排名为 ...

  9. Mac OS下安装和配置MongoDB

    安装和配置教程: 参考地址:https://blog.csdn.net/yibowanbo/article/details/80233030 可视化管理工具: 地址:https://blog.csdn ...

  10. 浏览器json数据格式化

    在浏览器上作接口测试的时候看到json 格式的数据是密密麻麻的一片,眼睛都花了..  如: 设置方法:  chrome  的右上角选择,然后---  更多工具---  扩展程序  ----   JSO ...