成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

從Python到NumPy,細說最接近人類思維的in操作

開發 后端
在Python語言中,in是一個使用頻率非常高的操作符,用于判斷對象是否位于字符串、元組、列表、集合或字典中。in操作和人的思維方式高度吻合,寫起來近乎于自然語言,充分體現了Python的哲學理念。

[[397119]]

本文轉載自微信公眾號「 Python作業輔導員」,作者天元浪子 。轉載本文請聯系 Python作業輔導員公眾號。

在Python語言中,in是一個使用頻率非常高的操作符,用于判斷對象是否位于字符串、元組、列表、集合或字典中。in操作和人的思維方式高度吻合,寫起來近乎于自然語言,充分體現了Python的哲學理念。

  1. >>> 'or' in 'hello world' 
  2. True 
  3. >>> 5 in {1,2,3,4} 
  4. False 
  5. >>> 'age' in {'name':'Mike''age':18} 
  6. True 

有趣的是,除了R、javascript、SQL外,包括C/C++在內的主流語言幾乎都不支持in操作。這或許可以解釋為什么Python語言被認為是最容易學習的編程語言。

習慣了使用Python的in操作符,有時就會自然而然地應用到NumPy數組操作上。比如,下面的寫法看起來沒有任何問題。

  1. >>> import numpy as np 
  2. >>> a = np.arange(9) 
  3. >>> a 
  4. array([0, 1, 2, 3, 4, 5, 6, 7, 8]) 
  5. >>> 5 in a 
  6. True 
  7. >>> 10 in a 
  8. False 

不過,當我嘗試在np.where()函數中使用in操作符的時候,出現了意外。

  1. >>> np.where(a>5) 
  2. (array([6, 7, 8], dtype=int64),) 
  3. >>> np.where(a%2==0) 
  4. (array([0, 2, 4, 6, 8], dtype=int64),) 
  5. >>> np.where(a in [2,3,5,7]) 
  6. Traceback (most recent call last): 
  7.   File "<pyshell#111>", line 1, in <module> 
  8.     np.where(a in [2,3,5,7]) 
  9. ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() 

使用a>5或者a%2==0作為條件,np.where()函數沒有問題,但是,使用a in [2,3,5,7],np.where()就會拋出異常。即便寫成下面這樣,也不能得到期望的結果。

  1. >>> np.where(a in np.array([2,3,5,7])) 
  2. (array([], dtype=int64),) 

難道NumPy不支持兩個數組之間的in操作嗎?不,強大到宇宙無敵的NumPy,怎么會不支持數組之間的in操作呢?NumPy不但支持,而且支持得很好。

  1. >>> p = np.array([2,3,5,7]) # 質數數組 
  2. >>> np.in1d(a, p) # 返回a的每一個元素是否是質數的布爾數組 
  3. array([FalseFalse,  True,  TrueFalse,  TrueFalse,  TrueFalse]) 
  4. >>> np.where(np.in1d(a, p)) # 返回數組a中質數的索引序號 
  5. (array([2, 3, 5, 7], dtype=int64),) 
  6. >>> np.where(np.in1d(a, p), -1, a) # 返回數組a中的質數全部替換為-1的結果 
  7. array([ 0,  1, -1, -1,  4, -1,  6, -1,  8]) 

np.in1d()的參數如果是多維數組,將被自動扁平化,且返回的布爾數組也是扁平化的一維數組。

  1. >>> np.in1d(a.reshape((3,3)), p) 
  2. array([FalseFalse,  True,  TrueFalse,  TrueFalse,  TrueFalse]) 

如果np.in1d()的參數是多維的,且期望返回和原數組結構相同的布爾數組,則應使用np.isin()函數。

  1. >>> np.isin(a.reshape((3,3)), p) 
  2. array([[FalseFalse,  True], 
  3.        [ TrueFalse,  True], 
  4.        [False,  TrueFalse]]) 
  5. >>> np.where(np.isin(a.reshape((3,3)), p)) 
  6. (array([0, 1, 1, 2], dtype=int64), array([2, 0, 2, 1], dtype=int64)) 

若是期望得到兩個數組的交集而不是交集元素的索引,下面兩種方式都可行。

  1. >>> a[np.where(np.isin(a, p))] 
  2. array([2, 3, 5, 7]) 
  3. >>> np.intersect1d(a, p) 
  4. array([2, 3, 5, 7]) 

第二種方式直接使用np.intersect1d()函數得到兩個數組的交集,且自動排序。不過,我更喜歡第一種方式。

責任編輯:武曉燕 來源: Python作業輔導員
相關推薦

2022-08-25 10:31:57

模型人工智能

2021-07-19 14:37:04

AI 數據人工智能

2021-12-24 09:01:05

LeetCode三數之和算法

2024-05-20 15:25:47

2023-03-26 21:03:54

GPT-4人工智能

2021-10-03 14:37:06

編程語言程序員代碼

2019-07-22 15:33:19

計算機互聯網 技術

2021-05-07 05:54:43

數據庫數據湖數據

2020-11-16 08:54:05

Google 開源技術

2021-09-11 16:42:26

AndroidAndroid 12

2025-03-21 14:31:14

NumPyPython數組

2021-03-01 10:43:56

大數據人工智能

2021-02-28 13:57:51

大數據人工智能信息

2013-08-20 13:34:02

創業極客

2021-07-26 16:08:36

AI Transformer人工智能

2017-11-20 05:41:41

數組矩陣NumPy

2016-01-05 09:42:39

2021-07-14 10:39:28

JqueryVue 編程

2021-12-09 15:03:10

人工智能AI人類思維

2011-01-04 17:08:10

匯編語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 伊人热久久 | 国产日韩一区二区三免费高清 | 亚洲高清视频一区二区 | www.三级| 国产视频导航 | 黄色毛片网站在线观看 | 国产午夜精品一区二区三区四区 | 91精品久久久久久久久中文字幕 | 亚洲综合在线视频 | 日韩乱码一二三 | 狠狠草视频 | 亚洲精品久久区二区三区蜜桃臀 | 国产在线观看一区二区 | 国产精品免费高清 | 精品久久久久久久久久久久 | 国产一级黄色网 | 亚洲国产精选 | 插插宗合网| 日本天天色 | 亚洲视频在线一区 | 99精品一区二区三区 | 免费一级片 | 黄色免费av | 午夜视频一区二区 | 日韩中文字幕视频在线观看 | 日本三级电影在线观看视频 | 91精品国产乱码久久久久久久久 | 日韩不卡在线 | 亚洲一区二区精品视频 | 国产日韩精品一区二区三区 | 激情一区二区三区 | 一级片av | 国产高清精品在线 | 伦理二区| 4h影视| 久色 | 欧美激情综合 | 欧美精品一区二区三区蜜桃视频 | 成人欧美日韩一区二区三区 | 亚洲香蕉在线视频 | 亚洲自拍偷拍视频 |