100道練習題,玩轉Numpy模塊!(上)

2021-01-18 小張Python

來源:和鯨社區https://www.kesci.com/home/project/59f29f67c5f3f5119527a2cc

Numpy 是 Python 做數據分析所必須要掌握的基礎庫之一。以下為入門 Numpy 的100題小練習,原為 github 上的開源項目,由和鯨社區的小科翻譯並整理(保留了部分原文作為參考)。受限於篇幅這裡只提供了部分題目的運行結果。友情提示:代碼雖好,自己動手才算學到。

1.導入numpy庫並簡寫為 np (★☆☆)

(提示: import … as …)

import numpy as np

2. 列印numpy的版本和配置說明 (★☆☆)

(提示: np.version, np.show_config)

print(np.__version__)
np.show_config()

3. 創建一個長度為10的空向量 (★☆☆)

(提示: np.zeros)

Z = np.zeros(10)
print(Z)

4. 如何找到任何一個數組的內存大小?(★☆☆)

(提示: size, itemsize)

Z = np.zeros((10,10))
print("%d bytes" % (Z.size * Z.itemsize))

5. 如何從命令行得到numpy中add函數的說明文檔? (★☆☆)

(提示: np.info)

numpy.info(numpy.add)

add(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj])

6. 創建一個長度為10並且除了第五個值為1的空向量 (★☆☆)

(提示: array[4])

Z = np.zeros(10)
Z[4] = 1
print(Z)

7. 創建一個值域範圍從10到49的向量(★☆☆)

(提示: np.arange)

Z = np.arange(10,50)
print(Z)

8. 反轉一個向量(第一個元素變為最後一個) (★☆☆)

(提示: array[::-1])

pythonZ = np.arange(50)
Z = Z[::-1]
print(Z)

9. 創建一個 3x3 並且值從0到8的矩陣(★☆☆)

(提示: reshape)

Z = np.arange(9).reshape(3,3)
print(Z)

10. 找到數組[1,2,0,0,4,0]中非0元素的位置索引 (★☆☆)

(提示: np.nonzero)

nz = np.nonzero([1,2,0,0,4,0])
print(nz)

11. 創建一個 3x3 的單位矩陣 (★☆☆)

(提示: np.eye)

Z = np.eye(3)
print(Z)

12. 創建一個 3x3x3的隨機數組 (★☆☆)

(提示: np.random.random)

Z = np.random.random((3,3,3))
print(Z)

13. 創建一個 10x10 的隨機數組並找到它的最大值和最小值 (★☆☆)

(提示: min, max)

Z = np.random.random((10,10))
Zmin, Zmax = Z.min(), Z.max()
print(Zmin, Zmax)

14. 創建一個長度為30的隨機向量並找到它的平均值 (★☆☆)

(提示: mean)

Z = np.random.random(30)
m = Z.mean()
print(m)

15. 創建一個二維數組,其中邊界值為1,其餘值為0 (★☆☆)

(提示: array[1:-1, 1:-1])

Z = np.ones((10,10))
Z[1:-1,1:-1] = 0
print(Z)

16. 對於一個存在在數組,如何添加一個用0填充的邊界? (★☆☆)

(提示: np.pad)

Z = np.ones((5,5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0)
print(Z)

17. 以下表達式運行的結果分別是什麼? (★☆☆)

(提示: NaN = not a number, inf = infinity)

0 * np.nan
np.nan == np.nan
np.inf > np.nan
np.nan - np.nan
0.3 == 3 * 0.1

print(0 * np.nan)
print(np.nan == np.nan)
print(np.inf > np.nan)
print(np.nan - np.nan)
print(0.3 == 3 * 0.1)

18.創建一個 5x5的矩陣,並設置值1,2,3,4落在其對角線下方位置 (★☆☆)

(提示: np.diag)

Z = np.diag(1+np.arange(4),k=-1)
print(Z)

19. 創建一個8x8 的矩陣,並且設置成棋盤樣式 (★☆☆)

(提示: array[::2])

Z = np.zeros((8,8),dtype=int)
Z[1::2,::2] = 1
Z[::2,1::2] = 1
print(Z)

20. 考慮一個 (6,7,8) 形狀的數組,其第100個元素的索引(x,y,z)是什麼?

(提示: np.unravel_index)

print(np.unravel_index(100,(6,7,8)))

21. 用tile函數去創建一個 8x8的棋盤樣式矩陣(★☆☆)

(提示: np.tile)

Z = np.tile( np.array([[0,1],[1,0]]), (4,4))
print(Z)

22. 對一個5x5的隨機矩陣做歸一化(★☆☆)

(提示: (x - min) / (max - min))

Z = np.random.random((5,5))
Zmax, Zmin = Z.max(), Z.min()
Z = (Z - Zmin)/(Zmax - Zmin)
print(Z)

23. 創建一個將顏色描述為(RGBA)四個無符號字節的自定義dtype?(★☆☆)

(提示: np.dtype)

color = np.dtype([("r", np.ubyte, 1),
                  ("g", np.ubyte, 1),
                  ("b", np.ubyte, 1),
                  ("a", np.ubyte, 1)])
color

24. 一個5x3的矩陣與一個3x2的矩陣相乘,實矩陣乘積是什麼?(★☆☆)

(提示: np.dot | @)

Z = np.dot(np.ones((5,3)), np.ones((3,2)))
print(Z)

25. 給定一個一維數組,對其在3到8之間的所有元素取反 (★☆☆)

(提示: >, <=)

Z = np.arange(11)
Z[(3 < Z) & (Z <= 8)] *= -1
print(Z)

26.下面腳本運行後的結果是什麼? (★☆☆)

(提示: np.sum)

print(sum(range(5),-1))
from numpy import *
print(sum(range(5),-1))

print(sum(range(5),-1))
from numpy import *
print(sum(range(5),-1))

27. 考慮一個整數向量Z,下列表達合法的是哪個? (★☆☆)

Z*Z2 << Z >> 2Z <- Z 1jZ Z/1/1 ZZ

Z = np.arange(5)
Z ** Z  # legal

array([  1,  1,  4,  27, 256])

Z = np.arange(5)
2 << Z >> 2  # false

array([0, 1, 2, 4, 8])

Z = np.arange(5)
Z <- Z   # legal

array([False, False, False, False, False])

Z = np.arange(5)
1j*Z   # legal

array([0.+0.j, 0.+1.j, 0.+2.j, 0.+3.j, 0.+4.j])

Z = np.arange(5)
Z/1/1   # legal

array([0., 1., 2., 3., 4.])

Z = np.arange(5)
Z<Z>Z    # false

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

28. 下列表達式的結果分別是什麼?(★☆☆)

np.array(0) / np.array(0)
np.array(0) // np.array(0)
np.array([np.nan]).astype(int).astype(float)

print(np.array(0) / np.array(0))
print(np.array(0) // np.array(0))
print(np.array([np.nan]).astype(int).astype(float))

29. 如何從零位對浮點數組做捨入 ? (★☆☆)

(提示: np.uniform, np.copysign, np.ceil, np.abs)

Z = np.random.uniform(-10,+10,10)
print (np.copysign(np.ceil(np.abs(Z)), Z))

30. 如何找到兩個數組中的共同元素? (★☆☆)

(提示: np.intersect1d)

Z1 = np.random.randint(0,10,10)
Z2 = np.random.randint(0,10,10)
print(np.intersect1d(Z1,Z2))

31. 如何忽略所有的 numpy 警告(儘管不建議這麼做)? (★☆☆)

(提示: np.seterr, np.errstate)

# Suicide mode on
defaults = np.seterr(all="ignore")
Z = np.ones(1) / 0

# Back to sanity
_ = np.seterr(**defaults)

An equivalent way, with a context manager:

with np.errstate(divide='ignore'):
    Z = np.ones(1) / 0

32. 下面的表達式是正確的嗎? (★☆☆)

(提示: imaginary number)

np.sqrt(-1) == np.emath.sqrt(-1)

np.sqrt(-1) == np.emath.sqrt(-1)  

False

33. 如何得到昨天,今天,明天的日期? (★☆☆)

(提示: np.datetime64, np.timedelta64)

yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
today     = np.datetime64('today', 'D')
tomorrow  = np.datetime64('today', 'D') + np.timedelta64(1, 'D')
print ("Yesterday is " + str(yesterday))
print ("Today is " + str(today))
print ("Tomorrow is "+ str(tomorrow))

34. 如何得到所有與2016年7月對應的日期?(★★☆)

(提示: np.arange(dtype=datetime64['D']))

Z = np.arange('2016-07', '2016-08', dtype='datetime64[D]')
print(Z)

35. 如何直接在位計算(A+B)*(-A/2)(不建立副本)? (★★☆)

(提示: np.add(out=), np.negative(out=), np.multiply(out=), np.divide(out=))

A = np.ones(3)*1
B = np.ones(3)*2
C = np.ones(3)*3
np.add(A,B,out=B)
np.divide(A,2,out=A)
np.negative(A,out=A)
np.multiply(A,B,out=A)

array([-1.5, -1.5, -1.5])

36. 用五種不同的方法去提取一個隨機數組的整數部分(★★☆)

(提示: %, np.floor, np.ceil, astype, np.trunc)

Z = np.random.uniform(0,10,10)

print (Z - Z%1)
print (np.floor(Z))
print (np.ceil(Z)-1)
print (Z.astype(int))
print (np.trunc(Z))

37. 創建一個5x5的矩陣,其中每行的數值範圍從0到4 (★★☆)

(提示: np.arange)

Z = np.zeros((5,5))
Z += np.arange(5)
print (Z)

38. 通過考慮一個可生成10個整數的函數,來構建一個數組(★☆☆)

(提示: np.fromiter)

def generate():
    for x in range(10):
        yield x
Z = np.fromiter(generate(),dtype=float,count=-1)
print (Z)

[0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]

39. 創建一個長度為10的隨機向量,其值域範圍從0到1,但是不包括0和1 (★★☆)

(提示: np.linspace)

Z = np.linspace(0,1,11,endpoint=False)[1:]
print (Z)

40. 創建一個長度為10的隨機向量,並將其排序 (★★☆)

(提示: sort)

Z = np.random.random(10)
Z.sort()
print (Z)

41.對於一個小數組,如何用比 np.sum更快的方式對其求和?(★★☆)

(提示: np.add.reduce)

Z = np.arange(10)
np.add.reduce(Z)

42. 對於兩個隨機數組A和B,檢查它們是否相等(★★☆)

(提示: np.allclose, np.array_equal)

A = np.random.randint(0,2,5)
B = np.random.randint(0,2,5)
# Assuming identical shape of the arrays and a tolerance for the comparison of values
equal = np.allclose(A,B)
print(equal)

False

# 方法2
# Checking both the shape and the element values, no tolerance (values have to be exactly equal)
equal = np.array_equal(A,B)
print(equal)

False

43. 創建一個只讀數組(read-only) (★★☆)

(提示: flags.writeable)

# 使用如下過程實現
Z = np.zeros(10)
Z.flags.writeable = False
Z[0] = 1

44. 將笛卡爾坐標下的一個10x2的矩陣轉換為極坐標形式(★★☆)

(hint: np.sqrt, np.arctan2)

Z = np.random.random((10,2))
X,Y = Z[:,0], Z[:,1]
R = np.sqrt(X**2+Y**2)
T = np.arctan2(Y,X)
print (R)
print (T)

45. 創建一個長度為10的向量,並將向量中最大值替換為1 (★★☆)

(提示: argmax )

Z = np.random.random(10)
Z[Z.argmax()] = 0
print (Z)

46. 創建一個結構化數組,並實現 x 和 y 坐標覆蓋 [0,1]x[0,1] 區域 (★★☆)

(提示: np.meshgrid)

Z = np.zeros((5,5), [('x',float),('y',float)])
Z['x'], Z['y'] = np.meshgrid(np.linspace(0,1,5),
                             np.linspace(0,1,5))
print(Z)

47. 給定兩個數組X和Y,構造Cauchy矩陣C (Cij =1/(xi - yj))

(提示: np.subtract.outer)

X = np.arange(8)
Y = X + 0.5
C = 1.0 / np.subtract.outer(X, Y)
print(np.linalg.det(C))

48. 列印每個numpy標量類型的最小值和最大值?(★★☆)

(提示: np.iinfo, np.finfo, eps)

for dtype in [np.int8, np.int32, np.int64]:
    print(np.iinfo(dtype).min)
    print(np.iinfo(dtype).max)

for dtype in [np.float32, np.float64]:
    print(np.finfo(dtype).min)
    print(np.finfo(dtype).max)
    print(np.finfo(dtype).eps)

49. 如何列印一個數組中的所有數值? (★★☆)

(提示: np.set_printoptions)

np.set_printoptions(threshold=np.nan)
Z = np.zeros((16,16))
print (Z)

50. 給定標量時,如何找到數組中最接近標量的值?(★★☆)

(提示: argmin)

Z = np.arange(100)
v = np.random.uniform(0,100)
index = (np.abs(Z-v)).argmin()
print (Z[index])

上面的 Numpy 題型小夥伴們都用過麼,看到陌生的語法時,記得動動自己的雙手,敲敲代碼鞏固一下!

本次只選取了其中的 50 道練習題,剩下的 50 道練習題將在下次推送發出,記得持續關注哦!

相關焦點

  • Python的武器庫04:numpy模塊(上)
    python的語法並不簡單,有複雜難懂的部分,之所以又這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。Python正式由於這些模塊的出現,只要引入這個模塊,調用這個模塊的集成函數,問題迎刃而解;不需要從頭開始,節省了大量的時間。
  • 中考複習:100道因式分解經典練習題!孩子吃透,數學至少140+
    中考複習:100道因式分解經典練習題!孩子吃透,數學至少140+因式分解是初中數學必學的知識點,同時也是中考數學必考的知識點之一,從解題難度上來講,這部分試題難度不高,基本上都是以選擇題和填空題這樣的形式來考察,當然在綜合解答題當中也會有所出現,只不過是跟其他知識點混合起來一併考察。其實,因式分解題的方法很多,主要看同學們能不能合理地進行運用。
  • Python的武器庫05:numpy模塊(下)
    python的語法並不簡單,有複雜難懂的部分,之所以有這樣一句格言,是因為python中有很多強大的模塊,就像一個武器庫。Python正式由於這些模塊的出現,只要引入這個模塊,調用這個模塊的集成函數,問題迎刃而解;不需要從頭開始,節省了大量的時間。上一篇文章主要講述了numpy的數學函數,這節課主要講一下numpy如何創建矩陣,以及對矩陣的一些運算。
  • 2020中考:地理大題100道深度練習,列印吃透,穩居全校第一!
    2020中考:地理大題100道深度練習,列印吃透,穩居全校第一!雖然地理在初中階段只有兩年的知識點,但有很多硬知識都是需要同學們儘快掌握的,地理也被稱之為文科中的理科,很多方位經緯度都需要同學們計算,所以每次考試的後面也都會有大題,如果不會做,那麼肯定是要吃虧的。雖然分值不多,但無論怎麼說都還是會被中考計入分數的,所以希望同學們以每分必爭的心態去對待每一場考試。
  • 「百練」成鋼:NumPy 100練
    ,營長為大家準備了 Python 入門學習、100+編程題,Python 開源項目 Top100、80+ Python 項目和 100+ 本 Python 免費書等資源。查看官網介紹,或下載安裝,可訪問:http://www.numpy.org/所有題目的難度劃分易、中、難,三個級別:1-33 題,難度:易34-63 題,難度:中64-100 題,難度:
  • 三年級上冊數學:100道(長方形、正方形)周長練習題,提分必備
    三年級上冊數學:100道(長方形、正方形)周長練習題,提分必備!轉眼間,暑假已經過半,同學們有沒有按時完成暑假作業呢?還是在家裡看電視作業還沒開始做呢?今天老師整理了100道三年級上冊數學(長方形/正方形)的周長練習題,建議家長們為孩子列印一份,讓孩子自己練習,提分必備!文末有word資料的領取方式!好了,今天就分享到這裡了,喜歡就多多關注吧!
  • 五年級100道方程式解應用題,給孩子印一份,要網課之餘多加練習
    五年級100道方程式解應用題,給孩子印一份,要網課之餘多加練習任何學科的任何教師在授課前應明確這堂課的教學目標,要讓學生掌握什麼,學會什麼,培養學生的何種價值觀,以取得更好的教學效果。而對小學數學應用題的教學來說,其任務就是鍛鍊學生自主思考的能力,開發學生邏輯思維能力,為學生日後的學習做好保障。所以小學數學教師要確定應用題教學的指導思想,提升課堂教學效率。   在應用題教學中,學生在教師的引導、講解與幫助下,其對題目的理解、分析能力都能取得進步,但同時也會有很多學生感到迷茫,不知道怎樣去答題。
  • 中考複習:100道因式分解練習題!考試必考內容,建議收藏!
    下面老師就給大家分享100道經典的因式分解練習題!希望家長們能替孩子收藏起來,特別是對於今年即將參加中考的學生來說,這份資料非常有幫助。【往期精彩閱讀】初中物理:電學知識總結+難題精選,當考前複習資料非常合適!高考新規,2020年這3類人將不能參加高考!一定要了解清楚!
  • 趣味數獨練習100題
    奧數重慶站 > 小升初 > 小升初練習題 > 正文 趣味數獨練習100題 來源:網站整理      2011-04-01 13:41:07
  • 初二物理歐姆定律練習題精選30道(計算題)
    歐姆定律練習題30道(計算題)   第一部分串聯電路15道   1、有兩個燈泡串聯在電路中,電路中的電流是0。2安培,燈泡L1兩端的電壓是4伏特,電路的總電阻為60歐姆,求:   (1)電源電壓   (2)燈泡L2兩端的電壓   (3)兩個燈泡的電阻分別為多大       請下載附件:     《初二物理歐姆定律練習題精選30道(計算題)》
  • 總結歸納:數學100道易錯題,選擇題練習,這類題型一定不能錯!
    孩子上初中,考試時難題做對簡單題易錯怎麼回事?這個問題,在初中生裡面確實非常多,也是很常見的類型。特別是數學,考試時候難題能夠作對,反而簡單題卻錯了,此類問題更是常見。孩子基礎不差,數學考試,後面的壓軸難題題他都能做對,可是選擇題第1題,第2題,他居然錯了。計算題,正確結果應該是「-2」,他給出的答案偏偏是「2」。最後一問,他一臉無辜,憨笑著說,粗心了,算錯了。
  • 高中數學|選擇填空最經典出題點:七大核心考點,配套100道練習題
    這100道選擇填空題,是高中數學7大核心考點最經典的出題點。你要知道「通往清華北大的路是用卷子鋪出來的」。對待數學學科尤其需要:手不離筆,「馬」不停題。巧做低檔題,全做對;穩做中檔題,一分不浪費;盡力衝擊高檔題,做錯也無悔。
  • 數據分析必備,NumPy進階80題(附下載)
    本文共分為兩個部分:完整版NumPy80題Notebook版下載方式(文末獲取)import numpy as npprint(np.,stop=50,num=10)備註1:從5開始,50結束,共10個數據,數據類型為int32np.arange(start = 5, stop = 55, step = 5,dtype = 'int32')備註2:思考與上一題的不同
  • 人教版二年級上冊數學「數與代數」專項練習,孩子都錯這道題!
    人教版二年級上冊數學「數與代數」專項練習,孩子都錯這道題!2020年秋季學期的期末考試越來越近了,各項複習都在緊張而有序的進行中,昨天測試了一分二年級上冊數學「數與代數」專項練習試卷,發現很多孩子都是錯這道題:「看圖寫出兩個乘法算式」這是一道看圖列式題,按理來說,對於這一類題,孩子們因該是再熟悉不過了,那為出錯的孩子為什麼這麼多呢?其實,錯這道題的孩子不是知識性缺漏,而是審題問題。
  • 「鬼才」班主任:初中數學100道易錯題集錦,竟讓全班均考125+!
    「鬼才」班主任:初中數學100道易錯題集錦,竟讓全班均考125+!數學一直都是同學們重點學習的科目之一,數學在考試中是重點考試的科目,數學在我們的日常生活中是我們得力的小助手,能夠幫助我們極大的提升我們的生活效率。所以同學們在學習數學的過程中一定要認真對待,學好數學,運用數學。
  • 五年級應用題列方程解答的步驟和方法,100道分類應用題解答方法
    很多五年級學生沒有掌握應用題的解答步驟與方法,沒有將應用題進行歸類,分類型學習,對於知識一知半解,似懂非懂,很多題看起來會做,但一做就出錯,或者是看到題目根本不知道怎麼分析入手,一籌莫展。這種學習狀態久了,必將會影響學生學習的信心,出現學習掉隊,成績下滑。
  • Python程式設計師必備——Numpy 100題(附答案)
    1.Import the numpy package under the name np (★☆☆)import numpy as np2.Print the numpy version and the configuration (★☆☆)print(np.
  • 「鬼才」老師:初中生物就教100道易錯題,全班會考43人拿滿分!
    「鬼才」老師:初中生物就教100道易錯題,全班會考43人拿滿分!初中生物是非常有趣的一門學科。不僅可以了解自然環境,還能了解到很多生態圈奇妙的現象。但是很多同學都很少去重視這門學科,之前做過調查,大部分初中生在學習生物和地理這兩門科目時間都非常少,主要就是課堂上學習下。
  • Python使用ctypes模塊調用DLL函數之C語言數組與numpy數組傳遞
    在Python語言中,可以使用ctypes模塊調用其它如C++語言編寫的動態連結庫DLL文件中的函數,在提高軟體運行效率的同時,也可以充分利用目前市面上各種第三方的DLL庫函數,以擴充Python軟體的功能及應用領域,減少重複編寫代碼、重複造輪子的工作量,這也充分體現了Python語言作為一種膠水語言所特有的優勢
  • Python模塊NumPy,Pandas,matplotlib的中文文檔
    今天比較忙所以不能寫長文了作為一名數據工程師需要熟練掌握python中的這些numpy,matplotlib,pandas,sklearn,seaborn,statsmodel.模塊但是由於這些模塊的文檔都是英文的可能一些英文不好的同學學起來會比較的困難,所以我從網上給大家找到一些中文的文檔