脾气暴躁的地方np where()Python函数
Numpy where()方法返回根据条件从x或y中选择的元素。如果要根据条件选择元素,则可以使用np where函数。使用where()方法,可以替换满足条件的Numpy数组ndarray的元素或执行指定的处理。
您必须为此教程安装numpy。另外,还要检查您的numpy版本。
句法
numpy.where(condition[, x, y])
参量
condition:返回Numpy布尔数组的条件表达式。
x,y:数组(可选,即两者都通过或不通过)
- 如果所有参数–> condition,则在numpy.where()方法中给出x&y,则它将返回从x&y中选择的元素,具体取决于条件产生的布尔数组中的值。所有三个阵列的大小必须相同。
- 如果不传递x&y参数,并且仅传递条件参数,则它将返回一个数组元组(每个轴一个),其中包含条件返回的布尔numpy数组中True元素的索引。
这说明如果条件对我们数组中的某个元素返回True,则新数组将从x中选择项。
否则,如果为False,则会采用y中的项目。
这样,我们的最终输出数组将是一个数组,其中条件= True时x的项,条件= False时y的项。
这里要注意的一件事是,尽管x和y是可选的,但如果指定x,则还必须指定y。您必须这样做,因为在这种情况下,输出数组的形状必须与输入数组的形状相同。
返回值
在根据条件进行过滤之后,where()方法返回一个新的numpy数组,该条件是一个类似于numpy的布尔值数组。
例
import numpy as np data = np.where([True, False, True], [11, 21, 46], [19, 29, 18]) print(data)
输出量
[11 29 46]
Numpy.where()遍历bool数组,对于每个True,它生成对应的元素数组x,对于每个False,它从数组y生成对应的元素。因此,它从x返回条件为True的项目数组,并从其他地方返回y的元素。
条件可以取一个数组的值([[True, True, True]]),这是一个类似numpy的布尔数组。 (默认情况下,NumPy仅支持数字值,但我们也可以将其强制转换为布尔值)。
让我们再举一个例子,如果条件是array([[True, True, False]]),而我们的数组是= ndarray([[1, 2, 3]]),将条件应用于数组(a[:, condition]),我们将获得数组ndarray([[1 2]])。
用numpy.where()替换元素
我们将使用np.random.randn()函数生成二维数组,并且仅输出正元素。参见代码。
import numpy as np # Random initialization of (2D array) arr = np.random.randn(2, 3) print(arr) # result will be all elements of a whenever the condition holds true (i.e only positive elements) # Otherwise, set it as 0 result = np.where(arr > 0, arr, 0) print(result)
输出量
[[-1.49929393 0.68739761 -0.59852165] [ 0.59212319 1.81549763 -0.32777714]] [[0. 0.68739761 0. ] [0.59212319 1.81549763 0. ]]
从输出中,您可以看到那些负值元素已被删除,而是将0替换为负值。
在多个条件下使用np where()
如果每个条件表达式都包含在()和&或|中如果使用,则将处理应用于多个条件。
import numpy as np # Random initialization of a (2D array) arr = np.random.randn(2, 3) print(arr) result = np.where((arr > 0.1) & (arr < 1) | (arr == 0.5), -1, 19) print(result)
输出量
[[-0.51877986 2.29435425 0.76549418] [-0.94666634 1.74349695 -0.82869105]] [[19 19 -1] [19 19 19]]
您可以从输出中看到,我们在and运算符和or运算符的帮助下应用了三个条件。如果数组元素的值在0.1到0.99或0.5之间,则它将返回-1,否则返回19。
即使在多个条件下,也不必使用np.where()获得布尔值ndarray。
处理满足条件的元素
除了原始ndarray之外,您还可以指定如果元素满足条件,将对元素执行的操作。
import numpy as np # Random initialization of a (2D array) arr = np.random.randn(2, 3) print(arr) result = np.where(arr < 1, arr * 10, 19) print('n') print('The array after performing the operation') print(result)
输出量
[[ 0.4934594 -0.43502907 -0.01968412] [-0.52953907 0.41415299 -0.29620816]] The array after performing the operation [[ 4.93459402 -4.35029075 -0.19684123] [-5.2953907 4.14152986 -2.96208157]]
您会看到,如果任何一项小于10,它将把每个元素乘以10。否则,它将在那个位置返回19。
用numpy.where()广播
如果我们提供所有条件,x和y数组,则numpy会将它们一起广播。
请参阅以下代码。
import numpy as np arr = np.arange(6).reshape(2, 3) brr = np.arange(3).reshape(1, 3) print(arr) print(brr) # Broadcasts (arr < 2, arr, and brr * 5) # of shape (2, 3), (2, 3) and (1, 3) c = np.where(arr < 2, arr, brr * 5) print(c)
输出量
[[0 1 2] [3 4 5]] [[0 1 2]] After broadcasting: [[ 0 1 10] [ 0 5 10]]
最后,Numpy where()函数示例结束。
也可以看看
脾气暴躁的随机shuffle()
百分位数()
numpy matmul()
numpy ceil()
脾气暴躁的地板()