这段代码是关于什么的?很难解释

问题描述

import numpy as np 
  
np.where([[True,False],[True,True]],[[1,2],[3,4]],[[5,6],[7,8]])

输出

array([[1,4]])

[True,True] 是什么意思?

解决方法

第一个列表(带有布尔值)确定将从其他两个列表中的哪个列表中选取一个值。

所以如果我们垂直对齐这些值,我们有:

np.where([[True,False],[True,True]],[[   1,2],[   3,4]],[[   5,6],[   7,8]])

现在当第一个列表有一个 True 时,那么对应的值(对于结果)将从第一个数据列表(即来自 [[1,[3,4]])中取出.如果它是 False,它将从另一个列表中取出(即来自 [[5,[7,8]])。

让我用星号标记所选元素:

np.where([[True,[[  *1,[  *3,*4]],# <-- select when True 
         [[   5,*6],8]])  # <-- select when False

因此结果是:

         [[   1,4]]
,

第一个参数是条件

[[True,True]]

True 返回 X,False 返回 Y。

第二个参数包含数据(X,Y):

[1,[[5,8]]

否则意味着 X=[1,4],Y=[5,8]

迭代:

  • 第一个条件为 True,我们得出 X = 1。
  • 第二个条件为 False,我们得出 Y = 6。
  • 第三个条件为真,我们得到 X = 3
  • 第四个条件为真,我们得到 X = 4