numpy数组,其中矢量化版本

时间:2017-07-24 10:58:51

标签: python numpy

我正在阅读有关备忘单中的矢量化表达式。如下所述

矢量化表达式

np.where(cond,x,y)是表达式'x if condition else y'的矢量化版本

示例:

np.where([True, False], [1, 2], [2, 3]) => ndarray (1, 3)

我无法理解上面的例子。我的理解是我们应该有表达,但在这里我们有[True,False]列表。

请求分解解释以及我们如何获得ndarray(1,3)的输出

由于

2 个答案:

答案 0 :(得分:2)

我通常使用np.where将布尔数组转换为索引数组。考虑这个例子:

In [12]: a = np.random.rand((10))

In [13]: a
Out[13]: 
array([ 0.80785098,  0.49922039,  0.02018482,  0.69514821,  0.87127179,
        0.23235574,  0.73199572,  0.79935066,  0.46667908,  0.11330817])

In [14]: bool_array = a > 0.5

In [15]: bool_array
Out[15]: array([ True, False, False,  True,  True, False,  True,  True, False, False], dtype=bool)

In [16]: np.where(bool_array)
Out[16]: (array([0, 3, 4, 6, 7]),)

您的示例说明。对于cond中的每个值:如果True,请从x中选择值,否则从y中选择值

cond: [True, False]
x   : [1, 2]
y   : [2, 3]

Result:
cond[0] == True  -> out[0] == x[0]
cond[1] == False -> out[1] == y[1]
out == [1, 3]

答案 1 :(得分:0)

数组[True, False]是由x<y这样的表达式生成的x=np.array([1,1])y=np.array([2,0])。所以cond是一个布尔数组,通常是前一个表达式的结果。 因此,更现实世界的用法的一个例子是:

np.where(x<y, [1, 2], [2, 3])