怎麼理解numpy的where()?

不太理解numpy.where()這個函數,看了官方文件,不太明白,比如下面這段

[xv if c else yv for (c,xv,yv) in zip(condition,x,y)]

Examples

&>&>&> np.where([[True, False], [True, True]],

... [[1, 2], [3, 4]],

... [[9, 8], [7, 6]])

array([[1, 8],

[3, 4]])


這是一個在 array 中尋找符合條件的功能. 這個例子中條件是 [[True, False], [True, True]],

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

當條件中的這個位置是 True 的時候, 我們需要挑選 `[[1, 2], [3, 4]]` 中的元素, 所以下面例子中你看到了 `1, 3, 4` 是從這裡來的.

是 False 時, 挑選 `[[9, 8], [7, 6]]` 中的元素, 所以你看到在 (0, 1) 這個位置的 `8` 是從這裡來的.

我一般用 np.where 來找到符合條件的 index:

a = np.array([[1,2],[3,4]])
result_index = np.where(a &> 2)
# (array([1, 1]), array([0, 1]))

a[result_index]
# array([3, 4])

其實上面的找 index 也類似於:

a = np.array([[1,2],[3,4]])
result_index = a &> 2
# array([[False, False],
# [ True, True]], dtype=bool)
a[result_index]
# array([3, 4])


官方解釋連接如下,可惜對於小白來說有點難以理解

numpy.where - NumPy v1.14 Manual

我的理解如下:如有錯誤請指正

numpy.where()分兩種調用方式:

1、np.where(cond,x,y):滿足條件(cond)輸出x,不滿足輸出y

2、np.where(arry):輸出arry中『真』值的坐標

實例:

1、np.where(cond,x,y):

同理:

2、np.where(arry)

np.where(x)輸出的是八個不為0的數(為"真"的數)的坐標,第一個array[ ]是橫坐標,第二個array[ ]是縱坐標;

即如下圖所示:

同理:


推薦閱讀:

Python:一篇文章掌握Numpy的基本用法
Numpy中Meshgrid函數介紹及2種應用場景
如何用python numpy產生一個正態分布隨機數的向量或者矩陣?
python numpy的樣本標準差怎麼寫?

TAG:Python | 編程 | 計算機科學 | Python入門 | numpy |