numpy.where介绍
NumPy 中的 numpy.where
函数:灵活的条件选择器
NumPy 是 Python 中一个强大的数值计算库,其中的 numpy.where
函数是其功能强大且常用的功能之一。这个函数可以根据条件选择返回来自两个不同数组的元素,在条件为真时返回第一个数组的元素,在条件为假时返回第二个数组的元素。让我们来深入了解这个函数的用法和功能。
函数基本形式
numpy.where(condition, [x, y])
可以接受三个参数:condition
作为条件,x
和 y
作为选择的两个数组。当只提供 condition
参数时,这个函数等同于 np.asarray(condition).nonzero()
,用来获取条件为真的索引。但这篇文章将重点讨论提供了三个参数的情况。
参数解析
condition
:一个布尔类型的数组,用来指定选择哪些元素来自数组x
或者y
。x
和y
:作为条件为真或假时的返回值的两个数组。
返回值
numpy.where
函数返回一个数组,其中包含了根据条件选择的元素。当条件为真时,返回来自数组 x
的元素,否则返回来自数组 y
的元素。
示例
-
一维数组的条件选择:
csspythonCopy code import numpy as np a = np.arange(10) result = np.where(a < 5, a, 10 * a) print(result)
这段代码会输出
[0, 1, 2, 3, 4, 50, 60, 70, 80, 90]
,根据条件a < 5
选择了不同的元素。 -
多维数组的条件选择:
luapythonCopy code import numpy as np result = np.where([[True, False], [True, True]], [[1, 2], [3, 4]], [[9, 8], [7, 6]]) print(result)
这段代码会输出一个二维数组
[[1, 8], [3, 4]]
,根据提供的条件选择了不同位置的元素。 -
广播操作:
inipythonCopy code import numpy as np x, y = np.ogrid[:3, :4] result = np.where(x < y, x, 10 + y) print(result) array([[10, 0, 0, 0], [10, 11, 1, 1], [10, 11, 12, 2]])
这个例子展示了如何对两个不同形状的数组进行条件选择。
总结
numpy.where
函数在处理条件选择时非常灵活,可以用于一维或多维数组,并且支持数组的广播操作。通过合理利用这个函数,我们可以简洁高效地根据条件选择数组元素,是 NumPy 中一个不可或缺的重要工具。
无论是数据处理、条件筛选还是数组操作,numpy.where
函数都是进行条件选择的绝佳选择,能够快速、高效地满足多种需求。
np.where和pandas的配合使用
在特征工程中经常需要使用数据清洗,这时候就可以使用where和pd配合来进行数据筛选。
bash
best = np.where(df['hearing(left)'] < df['hearing(right)'],
df['hearing(left)'], df['hearing(right)'])
例子:
这里使用了 NumPy 的 numpy.where
函数来比较 DataFrame 中两列数据('hearing(left)'
和 'hearing(right)'
),并根据条件选择对应位置的值。 具体来说,它会比较 'hearing(left)'
列和 'hearing(right)'
列中的每个元素。当 'hearing(left)'
列中的元素小于 'hearing(right)'
列中的对应元素时,best
数组中对应位置的值将会是 'hearing(left)'
列的值;反之,则是 'hearing(right)'
列的值。