添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
酒量小的啄木鸟  ·  Two problems with ...·  2 月前    · 
飞奔的企鹅  ·  搜索_常见问题·  1 年前    · 

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

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

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

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

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

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

提取符合条件的元素

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

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

import numpy as np
a = 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())
print(a[a < 5].mean())
# 2.0
print(a[a < 5].max())
print(a[a < 10].min())
print(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))
# False
print(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)
print(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))
# True
print(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()的文章。

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

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中提取,删除满足条件的元素,行和列将通过示例代码说明从NumPy数组ndarray中提取(获取)或删除满足条件的元素,行和列的方法。在此对以下内容进行说明:提取符合条件的元素提取符合条件的行和列使用numpy.all()提取所有元素均满足条件的行和列使用numpy.any()提取具有至少一个满足条件的元素的行/列删除符合条件的元素,行和列使用否定运算符〜使用numpy.delete()和numpy.where()对于多种条件当ndarr
input:arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
output: #> array([1, 3, 5, 7, 9])
Solution:
#Input
>>> arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#Solution
arr = arr[arr % 2 == 1]
>>> array([1, 3, 5, 7, 9])
这是对奇数元素提取,其他条件同理,在这个问题上我们深入再学习一下,首先 numpy array 数组是可以直
				
05_Numpy任意&列的删除方法(numpy.delete) 函数Numpy.delete()可以删除ndarray数组任意的或者列。 指定要删除的轴(维度)和要删除的位置(号,列号)。也可以通过切片或列表选择多个或者列的编号。 对以下的内容进说明: Numpy.delete()基本的使用方法 删除指定的索引(或者列):参数obj 删除指定的轴(维度):参数axis python删除表格常用的方法是DataFrame.drop()函数,DataFrame.drop()常用的操作是删除一整或者删除某一整列。对于删除某一列满足条件的所有操作暂不支持; 下面给大家介绍另外一个方法,支持删除和筛选数据; data.name.isin([筛选元素]); data:原始数据集 name:列名称 筛选元素:该列满足的条件值; 1、 删除某一列满足...
可以使用numpy的布尔索引来根据内容从numpy数组提取。具体步骤如下: 1. 定义一个条件,例如:`condition = arr[:, ] == 'a'`,表示提取第一列内容为'a'的。 2. 使用布尔索引提取符合条件的,例如:`result = arr[condition]`,表示提取符合条件的。 其,`arr`为numpy数组,`[:, ]`表示提取第一列,`== 'a'`表示内容为'a'。