2017-07-24 47 views
0

我正在阅读有关向量化表达式的备忘单。要提及的如下numpy array向量化版本

矢量化表达式

np.where(COND中,x,y)是表达的向量化版本 '×如果其他条件Y'

例如:

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

我不能理解上面的例子。我的理解是我们应该有表达,但是这里我们列出了[True,False]。

请求在分手解释以及如何得到ndarray的输出(1,3)

由于

+2

您是否阅读过官方文档:https://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html?你对哪个具体的部分坚持解释? – Divakar

+0

我的问题是我们如何去输出ndarray(1,3)在上面的例子 – venkysmarty

+0

可能重复[应用功能蒙面numpy数组](https://stackoverflow.com/questions/36421913/)。还有一个:https://stackoverflow.com/questions/35188508 – Divakar

回答

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] 
0

阵列[True, False]是什么会由表达式等x<y其中x=np.array([1,1])y=np.array([2,0])来制造。所以cond是一个布尔数组,通常是像前一个表达式的结果。 的一个更真实的上下的用法的示例将是therfore:

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