18_NumPy数组ndarray中提取,删除满足条件的元素,行和列

将通过示例代码说明从NumPy数组ndarray中提取(获取)或删除满足条件的元素,行和列的方法。

在此对以下内容进行说明:

  • 提取符合条件的元素
  • 提取符合条件的行和列
    • 使用numpy.all()提取所有元素均满足条件的行和列
    • 使用numpy.any()提取具有至少一个满足条件的元素的行/列
  • 删除符合条件的元素,行和列
    • 使用否定运算符〜
    • 使用numpy.delete()和numpy.where()
  • 对于多种条件

当ndarray包含nan时,例如在读取缺少数据的csv文件时,请参考以下文章。

  • 12_Numpy数组(ndarray)中缺失值(nan)的替换
  • 13_Numpy数组(ndarray)中含有缺失值(nan)行和列的删除方法

如果要替换或计算满足条件的元素,请参考以下文章。

  • 04_Numpy的函数np.where()—满足条件的处理
  • 17_NumPy数组ndarray中计算满足条件的元素的个数

提取符合条件的元素

如果要提取满足条件的元素,请使用ndarray [条件表达式]。

即使原始ndarray是多维数组,它也将返回一个展平的一维数组。

import numpy as npa = np.arange(12).reshape((3, 4))
print(a)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]print(a < 5)
# [[ True  True  True  True]
#  [ True False False False]
#  [False False False False]]print(a[a < 5])
# [0 1 2 3 4]print(a < 10)
# [[ True  True  True  True]
#  [ True  True  True  True]
#  [ True  True False False]]print(a[a < 10])
# [0 1 2 3 4 5 6 7 8 9]

返回一个新的数组ndarray,保留原来的ndarray不变。以下示例是相同的。

b = a[a < 10]
print(b)
# [0 1 2 3 4 5 6 7 8 9]print(a)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]

也可以计算满足条件的元素的总和(sum(),平均均值(),最大值max(),最小值min()和标准差std()。

print(a[a < 5].sum())
# 10print(a[a < 5].mean())
# 2.0print(a[a < 5].max())
# 4print(a[a < 10].min())
# 0print(a[a < 10].std())
# 2.8722813232690143

提取符合条件的行和列

在提取元素的示例中,返回了一个一维数组,但是如果使用np.all(),np.any(),则可以在保留原始ndarray尺寸的同时提取行和列。

将描述以下两种类型。

  • numpy.all():提取所有元素均满足条件的行/列
  • numpy.any():提取具有至少一个满足条件的元素的行/列

使用numpy.all()提取所有元素均满足条件的行和列

np.all()是一个函数,如果在第一个参数中传递的ndarray的所有元素均为True,则返回True,否则返回Flase。

如果传递参数轴,则每个轴(每个尺寸)的所有元素均为True时,将返回True。对于二维数组,axis = 0将是列的结果,而axis = 1将是行的结果。

print(a < 5)
# [[ True  True  True  True]
#  [ True False False False]
#  [False False False False]]print(np.all(a < 5))
# Falseprint(np.all(a < 5, axis=0))
# [False False False False]print(np.all(a < 5, axis=1))
# [ True False False]print(a < 10)
# [[ True  True  True  True]
#  [ True  True  True  True]
#  [ True  True False False]]print(np.all(a < 10, axis=0))
# [ True  True False False]print(np.all(a < 10, axis=1))
# [ True  True False]

将每个结果提供给行或列索引参考[行,列]时,将提取所需的行/列。在[line,:]的情况下,可以省略尾随的::。

print(a[:, np.all(a < 10, axis=0)])
# [[0 1]
#  [4 5]
#  [8 9]]print(a[np.all(a < 10, axis=1), :])
# [[0 1 2 3]
#  [4 5 6 7]]print(a[np.all(a < 10, axis=1)])
# [[0 1 2 3]
#  [4 5 6 7]]

如果不满足条件,则返回一个空的ndarray。

print(a[:, np.all(a < 5, axis=0)])
# []

即使只有一行或一列,维数也不会改变。

print(a[np.all(a < 5, axis=1)])
# [[0 1 2 3]]print(a[np.all(a < 5, axis=1)].ndim)
# 2print(a[np.all(a < 5, axis=1)].shape)
# (1, 4)

使用numpy.any()提取具有至少一个满足条件的元素的行/列

np.any()是一个函数,如果在作为第一个参数传递的ndarray中至少有一个True元素,则返回True,否则返回Flase。

如果传递参数轴,则每个轴(每个尺寸)至少有一个True元素时,将返回True。对于二维数组,axis = 0将是列的结果,而axis = 1将是行的结果。

print(a < 5)
# [[ True  True  True  True]
#  [ True False False False]
#  [False False False False]]print(np.any(a < 5))
# Trueprint(np.any(a < 5, axis=0))
# [ True  True  True  True]print(np.any(a < 5, axis=1))
# [ True  True False]

可以按照与np.all()相同的方式提取满足条件的行和列。

print(a[:, np.any(a < 5, axis=0)])
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]print(a[np.any(a < 5, axis=1)])
# [[0 1 2 3]
#  [4 5 6 7]]

删除符合条件的元素,行和列

如果要删除元素/行/列而不是根据条件提取(获取),则有以下两种方法。

  • 使用否定运算符〜
  • 使用numpy.delete()和numpy.where()

使用否定运算符〜

如果将负运算符〜添加到条件中,则将提取不满足条件的元素,行和列。这等效于删除满足条件的元素/行/列。

print(a[~(a < 5)])
# [ 5  6  7  8  9 10 11]print(a[:, np.all(a < 10, axis=0)])
# [[0 1]
#  [4 5]
#  [8 9]]print(a[:, ~np.all(a < 10, axis=0)])
# [[ 2  3]
#  [ 6  7]
#  [10 11]]print(a[np.any(a < 5, axis=1)])
# [[0 1 2 3]
#  [4 5 6 7]]print(a[~np.any(a < 5, axis=1)])
# [[ 8  9 10 11]]

使用numpy.delete()和numpy.where()

行和列也可以使用np.delete()和np.where()删除。

np.delete()将目标ndarray,要删除的索引(行号,列号等)以及目标轴(维)轴设置为参数。

在二维数组的情况下,axis = 0删除行,而axis = 1删除列,这与上面的np.all()和np.any()不同。

print(a)
# [[ 0  1  2  3]
#  [ 4  5  6  7]
#  [ 8  9 10 11]]print(np.delete(a, [0, 2], axis=0))
# [[4 5 6 7]]print(np.delete(a, [0, 2], axis=1))
# [[ 1  3]
#  [ 5  7]
#  [ 9 11]]

np.where()返回满足条件的元素的索引。

对于多维数组,它是满足每个维(行,列)条件的索引(行号,列号)列表的元组。

print(a < 2)
# [[ True  True False False]
#  [False False False False]
#  [False False False False]]print(np.where(a < 2))
# (array([0, 0]), array([0, 1]))print(np.where(a < 2)[0])
# [0 0]print(np.where(a < 2)[1])
# [0 1]

另请参阅以下有关np.where()的文章。

  • 04_Numpy的函数np.where()—满足条件的处理

通过组合这两个功能,可以删除满足条件的行和列。

print(np.delete(a, np.where(a < 2)[0], axis=0))
# [[ 4  5  6  7]
#  [ 8  9 10 11]]print(np.delete(a, np.where(a < 2)[1], axis=1))
# [[ 2  3]
#  [ 6  7]
#  [10 11]]print(a == 6)
# [[False False False False]
#  [False False  True False]
#  [False False False False]]print(np.where(a == 6))
# (array([1]), array([2]))print(np.delete(a, np.where(a == 6)))
# [ 0  3  4  5  6  7  8  9 10 11]print(np.delete(a, np.where(a == 6)[0], axis=0))
# [[ 0  1  2  3]
#  [ 8  9 10 11]]print(np.delete(a, np.where(a == 6)[1], axis=1))
# [[ 0  1  3]
#  [ 4  5  7]
#  [ 8  9 11]]

如上例所示,删除甚至具有一个满足条件的元素的行/列(与使用np.any()时相同)。

如果执行诸如计算由np.where()获取的索引数之类的处理,则可以删除满足所有条件的行和列(与使用np.all()时相同),但是np使用.all()更容易。

对于多种条件

如果要组合多个条件,请将每个条件表达式括在()中,并将其与&或|连接。

print(a[(a < 10) & (a % 2 == 1)])
# [1 3 5 7 9]print(a[np.any((a == 2) | (a == 10), axis=1)])
# [[ 0  1  2  3]
#  [ 8  9 10 11]]print(a[:, ~np.any((a == 2) | (a == 10), axis=0)])
# [[ 0  1  3]
#  [ 4  5  7]
#  [ 8  9 11]]

18_NumPy数组ndarray中提取,删除满足条件的元素,行和列相关推荐

  1. 【Dart 教程系列第 21 篇】Dart 之 firstWhere 返回数组中第一个满足条件的元素

    这是[Dart 教程系列第 21 篇],如果觉得有用的话,欢迎关注专栏. Dart 返回数组中第一个满足条件的元素,用 firstWhere() 方法,源代码定义如下 E firstWhere(boo ...

  2. 【Dart 教程系列第 22 篇】Dart 之 lastWhere 倒序查找数组中第一个满足条件的元素

    这是[Dart 教程系列第 22 篇],如果觉得有用的话,欢迎关注专栏. Dart 倒序查找数组中第一个满足条件的元素,用 lastWhere () 方法,源代码定义如下 E lastWhere(bo ...

  3. 【Dart 教程系列第 19 篇】Dart 之 indexWhere、lastIndexWhere 返回数组中第一个满足条件的元素的索引

    这是[Dart 教程系列第 19 篇],如果觉得有用的话,欢迎关注专栏. Dart 返回数组中第一个满足条件的元素的索引,用 indexWhere() 方法或者 lastIndexWhere() 方法 ...

  4. vector, list, map在遍历时删除符合条件的元素

    直接看源码,内有详细解释 /* 测试vector, list, map遍历时删除符合条件的元素 本代码测试环境: ubuntu12 + win7_x64 */ #include <iostrea ...

  5. 遍历List集合,删除符合条件的元素

    List集合的遍历有三种方式:增强for循环,普通for循环,Iterator迭代器遍历 如果只是对集合进行遍历,以上三种循环都可正常遍历: (1)增强For循环遍历List集合 List<St ...

  6. js二维数组arr中表示读取第i行第j列的是:_c++ c语言 数组与字符串

    c语法7 - 数组与字符串 概述 定义:把具有相同类型的若干变量按有序形式组织起来称为数组. C语言数组属于构造数据类型.一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型.因 ...

  7. C# 找出泛型集合中的满足一定条件的元素 List.Wher()

    在学习的过程中,发现泛型集合List<T>有一个Where函数可以筛选出满足一定条件的元素,结合Lambda表达式使用特别方便,写出来与大家分享. 1.关于Func<> Fun ...

  8. 在WPS,表格中如何将选中的单元格行和列高亮显示

    一.普通实现方法 1.如何将选中的单元格更方便直观的看出来,防止看错行和列,你也不用去用vba编写代码也可以得到如下图效果: 2.方法很简单,打开表格后,在右下角,就可以选择想要的颜色 二.代码实现方 ...

  9. js如何往数组Array中添加删除元素

    原文:https://www.tmico.cn/wordpress/?p=222 数组常用方法: 1.pop 删除原数组最后一项,并返回删除元素的值:如果数组为空则返回undefined  2.pus ...

最新文章

  1. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
  2. 互联网协议 — Ethernet 局域网技术的发展
  3. TCP/IP之大明内阁---协议的制定
  4. ADO Execute 方法
  5. Windows之node.js安装
  6. 一个两年Java的面试总结
  7. 2014计算机中山大学新华学院分数线,中山大学新华学院历年分数线 2021中山大学新华学院录取分数线...
  8. iOS11以后启动图尺寸
  9. ip地址在c语言中长度是多少_c语言中(++i)+(++i)+(++i)究竟等于多少?
  10. cs231n课后作业(1)
  11. 基于ssm的记账管理系统设计与实现【毕业设计jsp】
  12. win10安装wsl步骤
  13. SSM 校园外卖系统的设计与实现
  14. docker学习笔记(四)使用docker搭建环境
  15. 如何设计一个可扩展的优惠券功能
  16. C++求最大公约数 两种方法
  17. InteliJ IDEA2018.2.1X64 破解 使用
  18. MATLAB快速获取二维图像/矩阵最大值和位置
  19. 张亚飞《.Net for Flash FMS》读后笔记二
  20. 第一类换元法(凑微分法)

热门文章

  1. 不重启容器的情况下添加或者删除端口
  2. Proxy和Reflect详解
  3. 双极型晶体管---三极管
  4. 动态规划算法初步(6)——0/1 背包
  5. Java中集合相关案例(泛型通配符、Collections工具类、TreeSet、TreeMap、HashMap、HashSet和集合嵌套案例)
  6. 【区块链与密码学】第9-8讲:群签名在区块链中的应用 II
  7. 第一次接触动态规划解题
  8. Axure 8.1.0.3377 注册码激活
  9. 手工测试1年经验面试,张口要13K,我真是服了····
  10. 杭州电子科技大学acm---2009