numpy.where()在此示例中究竟如何选择元素?

前端之家收集整理的这篇文章主要介绍了numpy.where()在此示例中究竟如何选择元素? 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

从numpy docs

@H_403_5@>>> np.where([[True,False],[True,True]],... [[1,2],[3,4]],... [[9,8],[7,6]]) array([[1,4]])

我以[[True,True]]部分为条件,并且[[1,4]]和[[9,6] ]]根据docs参数分别为x和y.

那么,在以下示例中,该函数如何精确地选择元素?

另外,为什么这些示例中的元素类型是列表?

@H_403_5@>>> np.where([[True,False,True],[False,[[1,2,56],[[9,8,79],6]]) array([list([1,56]),list([3,4])],dtype=object) >>> np.where([[False,True,56,69],90,100],69]),dtype=object)
最佳答案
在第一种情况下,每个项都是(2,2)数组(或更确切地说,可以做成这种数组的列表).对于条件中的每个True,它将返回x中的对应项[[1-] [3,对于每个False,将返回y中的项[[-8] [–]]

在第二种情况下,列表参差不齐

@H_403_5@In [1]: [[True,True]] Out[1]: [[True,True]] In [2]: np.array([[True,True]]) Out[2]: array([list([True,True]),list([False,True])],dtype=object)

数组是(2,),带有2个列表.并且当转换为布尔值时,为2元素数组,且都为True.只有一个空列表会产生False.

@H_403_5@In [3]: _.astype(bool) Out[3]: array([ True,True])

然后where仅返回x值.

第二种情况是可以理解的,但却是病态的.

更多细节

让我们用一个简单的案例来更详细地演示.条件数组相同:

@H_403_5@In [57]: condition = np.array([[True,True]]) In [58]: condition Out[58]: array([[ True,[ True,True]])

单参数版本,等效于condition.nonzero():

@H_403_5@In [59]: np.where(condition) Out[59]: (array([0,1,1]),array([0,1]))

一些人发现更容易可视化该元组的转置-条件为True的3对坐标:

@H_403_5@In [60]: np.argwhere(condition) Out[60]: array([[0,0],[1,1]])

现在是具有3个参数和标量值的最简单版本.

@H_403_5@In [61]: np.where(condition,False) # same as condition Out[61]: array([[ True,True]]) In [62]: np.where(condition,100,200) Out[62]: array([[100,200],[100,100]])

可视化此操作的一个好方法是使用两个隐藏的任务.

@H_403_5@In [63]: res = np.zeros(condition.shape,int) In [64]: res[condition] = 100 In [65]: res[~condition] = 200 In [66]: res Out[66]: array([[100,100]])

另一种执行此方法方法是使用y值初始化数组,并在非零值处填充x值.

@H_403_5@In [69]: res = np.full(condition.shape,200) In [70]: res Out[70]: array([[200,[200,200]]) In [71]: res[np.where(condition)] = 100 In [72]: res Out[72]: array([[100,100]])

如果x和y是数组,而不是标量,则此蒙版分配将需要完善,但希望可以对此有所帮助.

原文链接:https://www.f2er.com/python/533095.html

猜你在找的Python相关文章