以下代码的前提:import numpy as np

numpy数组可以将许多种数据处理任务表述为简洁的数组表达式,用数组表达式替换循环的做法,通常被称为矢量化

官方说明文档:Array creation routines — NumPy v1.21 Manual

例如:我们想要处理一组值(网格型)上计算函数sqrt(x^2 + y^2)。np.meshgrid函数接受两个一维数组,并产生两个二维矩阵(对应于两个数组中所有的(x, y)对)。

  1. 1 >>> a = np.array([1, 2, 3])
  2. 2 >>> b = np.array([4, 5, 6])
  3. 3 >>> ax, bx = np.meshgrid(a, b)
  4. 4 >>> ax
  5. 5 array([[1, 2, 3],
  6. 6 [1, 2, 3],
  7. 7 [1, 2, 3]])
  8. 8 >>> bx
  9. 9 array([[4, 4, 4],
  10. 10 [5, 5, 5],
  11. 11 [6, 6, 6]])
  12. >>> z = np.sqrt(ax**2 + bx**2)
  13. >>> z
  14. array([[4.12310563, 4.47213595, 5. ],
  15. [5.09901951, 5.38516481, 5.83095189],
  16. [6.08276253, 6.32455532, 6.70820393]])

1.1 将条件逻辑表述为数组运算

numpy.where函数得三元表达式x if condition else y的矢量化版本。

numpy.where(condition[, x, y])

​ Return elements chosen from x or y depending on condition.

官方文档:numpy.where — NumPy v1.21 Manual

  1. 1 >>> xarr = np.array([1.1, 1.2, 1.3, 1.4, 1.5])
  2. 2 >>> yarr = np.array([2.1, 2.2, 2.3, 2.4, 2.5])
  3. 3 >>> cond = np.array([True, False, True, True, False])
  4. 4 >>> result = np.where(cond, xarr, yarr) #当cond中的值为True时,选取xarr的值,否则选取yarr
  5. 5 >>> result
  6. 6 array([1.1, 2.2, 1.3, 1.4, 2.5])

np.where的第二个和第三个参数不必是数组,它们都可以是标量值。在数据分析工作中,where通常用于根据另一个数组而产生一个新的数组。

  1. 1 >>> arr = np.random.randn(4, 4)
  2. 2 >>> arr
  3. 3 array([[-0.93788349, -0.13896424, -0.36149471, 0.55366473],
  4. 4 [-1.36781828, -1.09133439, -0.95340544, 1.58276544],
  5. 5 [ 0.55284577, 2.40035295, -0.53861131, -1.38135074],
  6. 6 [-0.23264662, 0.03819103, -0.2086907 , 2.32634099]])
  7. 7 >>> np.where(arr > 0, 2, -2) #将正值设为2,负值设为-2
  8. 8 array([[-2, -2, -2, 2],
  9. 9 [-2, -2, -2, 2],
  10. 10 [ 2, 2, -2, -2],
  11. 11 [-2, 2, -2, 2]])
  12. 12 >>> np.where(arr > 0, 2, arr) #只将正值设置为2
  13. 13 array([[-0.93788349, -0.13896424, -0.36149471, 2. ],
  14. 14 [-1.36781828, -1.09133439, -0.95340544, 2. ],
  15. 15 [ 2. , 2. , -0.53861131, -1.38135074],
  16. 16 [-0.23264662, 2. , -0.2086907 , 2. ]])

1.2 数学和统计方法

可以通过数组上的一组数学函数对整个数组或某个轴向的数据进行统计计算。sum、mean以及标准差std等聚合计算(aggregation,通常叫做约简(reduction))既可以当作数组的实例方法调用,也可以当作顶级numpy函数的使用。

mean和sum这类函数可以接受一个axis参数(用于计算该轴向上的统计值),最终计算的结果是一个少一维的数组。这里说的轴的意思如下:

mean官方说明:numpy.mean — NumPy v1.21 Manual

sum官方说明:numpy.sum — NumPy v1.21 Manual

std官方说明:numpy.std — NumPy v1.21 Manual

  1. 1 >>> arr = np.arange(8).reshape(2, 4)
  2. 2 >>> arr
  3. 3 array([[0, 1, 2, 3],
  4. 4 [4, 5, 6, 7]])
  5. 5 >>> arr.mean()
  6. 6 3.5
  7. 7 >>> np.mean(arr)
  8. 8 3.5
  9. 9 >>> arr.sum()
  10. 10 28
  11. 11 >>> arr.sum(0)
  12. 12 array([ 4, 6, 8, 10])
  13. 13 >>> arr.mean(0)
  14. 14 array([2., 3., 4., 5.])
  15. 15 >>> arr.sum(1)
  16. 16 array([ 6, 22])
  17. 17 >>> arr.mean(1)
  18. 18 array([1.5, 5.5])
  19. 19 >>> arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
  20. 20 >>> arr.cumsum(0)
  21. 21 array([[ 0, 1, 2],
  22. 22 [ 3, 5, 7],
  23. 23 [ 9, 12, 15]], dtype=int32)
  24. 24 >>> arr.cumprod(0)
  25. 25 array([[ 0, 1, 2],
  26. 26 [ 0, 4, 10],
  27. 27 [ 0, 28, 80]], dtype=int32)
  28. 28 >>>

基本数组统计方法:

方法 说明
sum 对数组中全部或某轴向的元素求和,零长度的数组的sum为0
mean 算术平均值,零长度的数组的mean为NaN
std、var 分别为标准差和反差,自由度可调(默认为n)
min、max 最大值和最小值
argmin、argmax 分别为最大和最小元素的索引
cumsum 所有元素的累计和,如果没有指定坐标,则当作一维数组处理。
cumprod 所有元素的累计积,如果没有指定坐标,则当作一维数组处理。

1.3 用于布尔型数组的方法

在上表中的方法中,布尔值会被强制转换为1(True)和False(0)。因此sum经常被用来对布尔型数组中的True值计数。另外any可用于测试数组中是否存在一个或多个True,而all则检查数组中所有值是否都是True。

  1. 1 >>> arr = np.random.randn(100)
  2. 2 >>> (arr > 0).sum()
  3. 3 52
  4. 4 >>> bools = np.array([False, False, True, False])
  5. 5 >>> bools.any()
  6. 6 True
  7. 7 >>> bools.all()
  8. 8 False
  9. 9 >>>

1.4 排序

numpy数组也可以通过sort方法就地排序,多维数组可以在任何一个轴向上进行排序,只需将轴编号传给sort即可。

  1. 1 >>> arr = np.random.randn(8)
  2. 2 >>> arr
  3. 3 array([ 1.63629002, 2.20429024, -0.14614928, -0.29397459, -2.45375594,
  4. 4 1.14484692, -0.28331352, 0.30005863])
  5. 5 >>> arr.sort()
  6. 6 >>> arr
  7. 7 array([-2.45375594, -0.29397459, -0.28331352, -0.14614928, 0.30005863,
  8. 8 1.14484692, 1.63629002, 2.20429024])
  9. 9 >>> arr = np.random.randn(5, 3)
  10. 10 >>> arr
  11. 11 array([[-0.94707326, -0.21398683, 1.34561267],
  12. 12 [ 0.82759518, -1.49443648, 0.5760489 ],
  13. 13 [ 1.22341129, 0.55710449, 0.27911583],
  14. 14 [ 0.25850697, -0.15072134, -0.40032061],
  15. 15 [-1.70822177, 0.89374659, 0.13256954]])
  16. 16 >>> arr.sort(0)
  17. 17 >>> arr
  18. 18 array([[-1.70822177, -1.49443648, -0.40032061],
  19. 19 [-0.94707326, -0.21398683, 0.13256954],
  20. 20 [ 0.25850697, -0.15072134, 0.27911583],
  21. 21 [ 0.82759518, 0.55710449, 0.5760489 ],
  22. 22 [ 1.22341129, 0.89374659, 1.34561267]])
  23. 23 >>>

1.5 唯一化以及其他的集合逻辑

numpy提供了一些针对一维ndarray的基本集合运算,最常用的是np.unique,用于找出数组中唯一值并返回已排序的结果。

np.in1d函数可用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组。

  1. 1 >>> names = np.array(['bob', 'joe', 'will', 'bob', 'will', 'joe', 'joe'])
  2. 2 >>> np.unique(names)
  3. 3 array(['bob', 'joe', 'will'], dtype='<U4')
  4. 4 >>> ints = np.array([3, 3, 2, 1, 4, 5])
  5. 5 >>> np.unique(ints)
  6. 6 array([1, 2, 3, 4, 5])
  7. 7 >>> sorted(set(names))
  8. 8 ['bob', 'joe', 'will']
  9. 9 >>> values = np.array([6, 0, 0, 3, 2, 2, 5, 6])
  10. 10 >>> np.in1d(values, [2, 3, 6])
  11. 11 array([ True, False, False, True, True, True, False, True])
  12. 12 >>>

下表是数组的集合运算。

方法 说明
unique(x) 计算x中的唯一元素,并返回有序结果
intersect1d(x, y) 计算x和y中的公共元素,并返回有序结果
union1d(x, y) 计算x和y的并集,并返回有序结果
in1d(x, y) 得到一个表示“x的元素是否包含于y”的布尔型数组
setdiff1d(x, y) 集合的差,即元素在x中且不在y中
setxor1d(x, y) 集合的对称差,即存在于一个数组中但不同时存在于两个数组中的元素。
  1. >>> x = np.array([1, 2, 3])
  2. >>> y = np.array([2, 3, 4, 5])
  3. >>> np.intersect1d(x, y)
  4. array([2, 3])
  5. >>> np.union1d(x, y)
  6. array([1, 2, 3, 4, 5])
  7. >>> np.setdiff1d (x, y)
  8. array([1])
  9. >>> np.setxor1d(x, y)
  10. array([1, 4, 5])

numpy基础--利用数组进行数据处理的更多相关文章

  1. 《利用python进行数据分析》读书笔记--第四章 numpy基础:数组和矢量计算

    http://www.cnblogs.com/batteryhp/p/5000104.html 第四章 Numpy基础:数组和矢量计算 第一部分:numpy的ndarray:一种多维数组对象 实话说, ...

  2. 《利用Python进行数据分析·第2版》第四章 Numpy基础:数组和矢量计算

    <利用Python进行数据分析·第2版>第四章 Numpy基础:数组和矢量计算 numpy高效处理大数组的数据原因: numpy是在一个连续的内存块中存储数据,独立于其他python内置对 ...

  3. 利用Python进行数据分析——Numpy基础:数组和矢量计算

    利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...

  4. python数据分析---第04章 NumPy基础:数组和矢量计算

    NumPy(Numerical Python的简称)是Python数值计算最重要的基础包.大多数提供科学计算的包都是用NumPy的数组作为构建基础. NumPy的部分功能如下: ndarray,一个具 ...

  5. 【学习笔记】 第04章 NumPy基础:数组和矢量计算

    前言 正式开始学习Numpy,参考用书是<用Python进行数据清洗>,计划本周五之前把本书读完,关键代码全部实现一遍 NumPy基础:数组和矢量计算 按照书中所示,要搞明白具体的性能差距 ...

  6. NumPy基础:数组和矢量计算

    今天被老板fire了,还是继续抄书吧,安抚我受伤的小心脏.知识还是得慢慢积累,一步一个脚印,这样或许才是最快的捷径. ------2015-2-16-------------------------- ...

  7. (一)NumPy基础:数组和矢量计算

    一.创建ndarray 1.各种创建函数的使用 import numpy as np #创建ndarray #1.array方法 data1 = [[6, 7.5, 8, 0, 1], [2, 8, ...

  8. numpy利用数组进行数据处理

    将条件逻辑表述为数组运算 numpy.where()是一个三目运算的表达式 In [34]: xarr = np.array([1.1,1.2,1.3,1.4,1.5]) In [35]: yarr ...

  9. Numpy 利用数组进行数据处理

    Numpy数组使你可以将许多种数据处理任务表述为简洁的数组表达式(否则需要编写循环). 用数组表达式代替循环的做法,通常被称为矢量化.一般来说,矢量化数组运算要比等价的纯跑一趟湖南快 上一两个数量级( ...

  10. 《利用python进行数据分析》NumPy基础:数组和矢量计算 学习笔记

    一.有关NumPy (一)官方解释 NumPy is the fundamental package for scientific computing with Python. It contains ...

随机推荐

  1. java调用QQ影音进行截图

    import java.awt.Graphics2D; import java.awt.Image; import java.awt.Robot; import java.awt.Toolkit; i ...

  2. Go 单元测试之mock接口测试

    目录 一.gomock 工具介绍 二.安装 三.使用 3.1 指定三个参数 3.2 使用命令为接口生成 mock 实现 3.3 使用make 命令封装处理mock 四.接口单元测试步骤 三.小黄书Se ...

  3. k8s架构与原理介绍

    K8s概述 目录 K8s概述 1.什么是K8s 2.K8s 设计架构 3. k8s重要节点描述 4. 过程原理: 5. k8s的核心功能 6. k8s的历史 7. k8s的安装方式 8. k8s的应用 ...

  4. Kafka 的分片和副本机制

    我们在使用 Kafka 生产和消费消息的时候,肯定是希望能够将数据均匀地分配到所有服务器上.比如在日志收集场景,数据量是非常巨大的,例如大批量的集群每分钟产生的日志都能以 GB 计,所以如何将这么大的 ...

  5. OpenKruise v0.9.0 版本发布:新增 Pod 重启、删除防护等重磅功能

    简介: OpenKruise 是阿里云开源的云原生应用自动化管理套件,也是当前托管在 Cloud Native Computing Foundation (CNCF) 下的 Sandbox 项目.它来 ...

  6. [FAQ] dyld: Library not loaded: /usr/local/opt/icu4c/lib/libicui18n.64.dylib

    通过 ls -al /usr/local/opt 可以看到 icu4c 链接的不是 libicui18n.64.dylib. 一般是 node 版本问题会出现该提示,通过观察版本大小,决定是升级还是使 ...

  7. go和c#实现斐波那契数列

    首先通过C#实现斐波那契数列: using System.Threading.Channels; namespace App001 { internal class Program { static ...

  8. Photoshop AI 令人惊叹的生成式填充

    原文地址:Adobe Photoshop's Amazing New Generative Fill | by Paul DelSignore | The Generat | May, 2023 | ...

  9. kubernetes 存储流程

    PV 与 PVC PVC (PersistentVolumeClaim),命名空间(namespace)级别的资源,由 用户 or StatefulSet 控制器(根据VolumeClaimTempl ...

  10. kube-proxy 流量流转方式

    简介 kube-proxy 是 Kubernetes 集群中负责服务发现和负载均衡的组件之一.它是一个网络代理,运行在每个节点上, 用于 service 资源的负载均衡.它有两种模式:iptables ...