脾气暴躁的地方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()

脾气暴躁的地板()

资讯来源:由0x资讯编译自APPDIVIDEND,版权归作者Krunal所有,未经许可,不得转载
你可能还喜欢