挑戰NumPy100關,全部搞定你就NumPy大師了 | 附答案

  • 2019 年 10 月 4 日
  • 筆記

來源:知乎用戶 靳偉 本文僅用於學習交流分享如有侵權請聯繫刪除

原作者: 2016 Nicolas P. Rougier MIT協議 翻譯版權歸我所有

此合集旨在於為NumPy新老用戶提供快速參考和一些練習。這些練習題主要來自於NumPy郵件組,StackOverflow和NumPy文檔. 答案在最後面


問題開始:

  1. 使用名稱np導入numpy包 (★☆☆)
  2. 列印出numpy版本號和配置資訊 (★☆☆)
  3. 創建一個空向量, 尺寸為10 (★☆☆)
  4. 查出一個數組佔用的記憶體體積 (★☆☆)
  5. 如何使用命令行來獲得numpy中add這個函數的文檔? (★☆☆)
  6. 創建一個大小為10的空向量,但第五個值為1 (★☆☆)
  7. 創建一個值為從10到49的向量[10,11,12...49] (★☆☆)
  8. 反轉一個向量(第一個元素變為最後一個) (★☆☆)
  9. 創建一個3x3矩陣,其值範圍為0到8 (★☆☆)
  10. 從[1,2,0,0,4,0]中查找出所有非零元素 (★☆☆)
  11. 創建一個 3 * 3單位矩陣 (★☆☆)
  12. 使用隨機值創建一個 $333$ 數組(★☆☆)
  13. 使用隨機值創建一個10x10數組,並找出其最小值和最大值 (★☆☆)
  14. 創建一個大小為30的隨機向量並找到平均值 (★☆☆)
  15. 創建一個2維數組,邊框元素都為1,內部元素都為0 ; 如下圖所示(★☆☆)

16. 如何在一個既有數組周圍添加邊框(用0填充) (★☆☆)

17. 下方表達式的結果是什麼? (★☆☆)

0 * np.nan  np.nan == np.nan  np.inf > np.nan  np.nan - np.nan  np.nan in set([np.nan])  0.3 == 3 * 0.1  

18. 創建一個5x5矩陣, 其對角線下方的數值正好是1,2,3,4 (★☆☆)

19. 創建一個8x8矩陣並用棋盤圖案填充它 (★☆☆)

20. 假設有一個(6,7,8)形狀的三維數組,那麼其中第100個元素的索引(x,y,z)是什麼?

21. 使用tile函數創建棋盤格8x8矩陣 (★☆☆)

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

23. 創建一個自定義dtype,用這個數據類型可以將顏色描述為四個無符號位元組(RGBA)(★☆☆)

24. 5x3矩陣乘以3x2矩陣(實矩陣乘積) (★☆☆)

25. 給定一維數組,所有在3到8之間的元素都變成其負數(正->負, 負->正). (★☆☆)

26. 這段腳本的輸出是什麼?(★☆☆)

# Author: Jake VanderPlas    print(sum(range(5),-1))  from numpy import *  print(sum(range(5),-1))
  1. 27. 設有整數向量Z,這些表達式中的哪些是合法的(★☆☆)
Z**Z  2 << Z >> 2  Z <- Z  1j*Z  Z/1/1  Z<Z>Z

28. 以下表達式的結果是什麼?

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

29. 如何讓一個浮點類型數組裡面的值全部取整? (★☆☆)

30. 如何在兩個數組之間找到相同的值? (★☆☆)

31. 如何忽略所有的numpy警告(真正幹活的時候不推薦這麼干哈)?? (★☆☆)

32. 以下表達式為真嗎?(★☆☆)

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

33. 如何獲取昨天,今天和明天的日期? (★☆☆)

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

35. 如何原地計算 ((A+B)*(-A/2)) (不做copy動作)? (★★☆)

36. 使用5種不同的方法提取一個隨機數組裡的整型數據部分 (★★☆)

37. 創建一個5x5矩陣,行值從0到4 (★★☆)

38. 已知一個生成器函數, 可以生成10個整數. 用它來構建數組 (★☆☆)

39. 創建一個大小為10的向量,值為0到1的小數(不包含0和1) (★★☆)

40. 創建一個大小為10的隨機向量並對其進行排序 (★★☆)

41. 如何比np.sum更快地對一個小數組求和?(★★☆)

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

43. 使數組不可變(只讀) (★★☆)

44. 設有一個隨機10x2矩陣, 其中的值代表笛卡爾坐標,現需將它們轉換為極坐標 (★★☆)

45. 創建大小為10的隨機向量,並將最大值替換為0 (★★☆)

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

47. 列印每個numpy標量類型的最小和最大可表示值 (★★☆)

48. 如何列印數組的所有值?(★★☆)

50. 如何在向量中找到最接近的值(給定標量)?(★★☆)

51. 創建一個表示位置(x,y)和顏色(r,g,b)的結構化數組(★★☆)

52. 設有一個(100,2)的隨機向量, 每組值代表一個坐標, 求點與點之間的距離 (★★☆)

53. 如何就地將float(32位)數組轉換為整型(32位)數組?

54. 如何讀取以下文件?? (★★☆)

1, 2, 3, 4, 5  6,  ,  , 7, 8   ,  , 9,10,11

55. 什麼東西與numpy數組的枚舉等價?(★★☆)

56. 生成一個通用的二維高斯型數組 (★★☆)

57. 如何將p個元素隨機放置在二維數組中 (★★☆)

58. 減去矩陣每行的均值 (★★☆)

59. 如何按第n列排序數組?(★★☆)

60. 如何判斷一個二維數組裡是否有空列? (★★☆)

61. 有一個給定值, 從數組中找出最接近的值 (★★☆)

62. 設有兩個形狀為(1,3)和(3,1)的數組,如何使用迭代器計算它們的總和?(★★☆)

63. 創建一個具有name屬性的數組類(★★☆)

64. 設有一個給定的向量,如何讓每個能被第二個向量索引的元素加1(注意重複索引的情況)?(★★★)

65. 如何根據索引列表(I)將向量(X)的指定元素轉移到到數組(F)?(★★★)

66. 設有一個(dtype = ubyte)的(w,h,3)影像,計算內部不同顏色的數量(★★★)

67. 設有一個四維數組,如何一次獲取最後兩個軸上元素的總和?(★★★)

68. 設有一個單一維度的向量D, 如何計算D的一個子集的平均值 (該子集使用一個和D相同大小的向量S來存子集元素的索引? (★★★)

69. 如何獲得兩個向量的點積? (★★★)

點積就是兩個向量對應位置一一相乘後求和的操作,最後結果是一個標量,是一個實數值。 兩個向量a = [a1, a2,…, an]和b = [b1, b2,…, bn]的點積定義為: a·b = a1b1 + a2b2 + …… + anbn。 使用矩陣乘法並把(縱列)向量當作n×1 矩陣,點積還可以寫為: a·b=a^T*b ,這裡的a^T指示矩陣a的轉置

70. 設有考慮向量A [1,2,3,4,5],構建一個新向量, 在A的每個值之間插入3個連續零? (★★★)

71. 設有一個維度(5,5,3)的數組, 如何與維度(5,5)的數組相乘? (★★★)

72. 如何讓數組裡面的兩行互換? (★★★)

73. 設有10個三元組(例如[x1, y1, z1]), 每個三元組代表一個三角形. 這些三角形可能還有共同的頂點. 現在需要找出組成這10個三角形的所有線段的集合(還要去重哦) (★★★)

74. 設有一個bincount數組C, 請生成一個數組A, 使得np.bincount(A) == C? (★★★)

解釋一下什麼叫bincount

import numpy as np  # x里最大的數為10,那麼它的索引值為0到10, 因此bin的數量為11  x = np.array([1, 1, 1, 6, 4, 4, 0, 0, 10])  # 0出現了2次,1出現了3次......10出現了1次......  print(np.bincount(x))  #因此,輸出結果為:[2 3 0 0 2 0 1 0 0 0 1]    # 我們可以看到x中最大的數為18,那麼它的索引值為0到18, 因此bin的數量為19  x = np.array([18, 10, 2, 10, 4, 1])  # 0出現了0次,索引1出現了1次......索引10出現了2次......  print(np.bincount(x))  #輸出結果為:[0 1 1 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 1]

75. 如何使用數組上的滑動窗口計算平均值?(★★★)

76. 設有一個一維數組Z,請構建一個二維數組,其第一行為(Z [0],Z [1],Z [2]),每個後續行都要移1單位(最後一行應為(Z [ -3],Z [-2],Z [-1]) (★★★)

77. 如何反轉一個布爾值(true->false或false->true), 或改變浮點值前面的正負號(正浮點數變成負浮點數, 或負浮點數變正浮點數)? (★★★)

78. 設有兩組的 點 數據, 這些點 兩兩可以構建成一個線段. 同時設有一個點p, 如何計算從p到每個線段的垂直距離?(★★★)

下圖為一個樣例

79. 設有兩組的 點 數據, 這些點 兩兩可以構建成一個線段. 同時設有一系列點P, 如何計算從P[j]到每個線段的垂直距離? (★★★) 可參考上一道題

80. 設有一個任意數組,編寫一個函數,以給定元素為中心, 提取具有固定形狀的子部分(必要時可以用固定值來做填充)(★★★)

81. 設有一個Z = [1,2,3,4,5,6,7,8,9,10,11,12,13,14], 求一個數組R = [[1,2,3,4], [2,3,4,5], [3,4,5,6], ..., [11,12,13,14]]? (★★★)

82. 求一個矩陣的秩 (★★★)

秩(RANK), 我們知道線性代數中的矩陣, 有一種含義就是代表一個方程組, 矩陣的秩就是這個方程組中那些原有的成員的數量

83. 如何找出一個數組裡出現次數最多的元素?

84. 從一個隨機的10x10矩陣中提取所有連續的3x3塊(★★★)

85. 創建一個二維數組子類,使Z [i,j] == Z [j,i] (★★★)

86. 設有P個矩陣, 形狀為(n,n); 以及p個向量, 形狀為(n,1). 問題是, 如何一次就算出p矩陣乘積之和(結果的形狀應該是(n,1)) (★★★)

87.設有一個16x16的數組, 如何獲得分塊加總 (每個塊都是4* 4)? (★★★)

88. 如何使用numpy數組實現the Game of Life?(★★★)

89. 如何獲取一個數組裡面前N大 (the largest n) 的元素? (★★★)

90. 給定任意數量的向量,請用它們構建笛卡爾積(每個項的每個組合)(★★★)

91. 如何使用一個常規數組創建一個記錄數組(record array)? (★★★)

92. 設有一個很大的向量 Z, 求Z的3次冪(至少嘗試3種不同的方法) (★★★)

93. 設有兩個數組A和B, A的形狀(8,3), B的形狀是(2,2). 請找出A的某些行, 該行內包含B的整行元素(不在意元素順序). (★★★)

94. 設有一個10x3矩陣,請找出其中數值不完全相等的行 (e.g. [2,2,3]) (★★★)

95. 將int的向量轉換為二元矩陣來表示(★★★)

96. 設有一個二維數組,如何提取值和其他行都不同的行?(★★★)

97. 設有兩個向量A和B, 請寫出AB求inner, outer, sum和mul運算的愛因斯坦求和約定(einsum)等效形式. (★★★)

注: 關於einsum, 可以來這裡學習

98. 設有兩個矢量(X,Y)描述的一條路徑,如何使用等距樣本法對其進行取樣

99. 給定整數n和2維數組X,從X中選擇可以解釋為具有n度的多項分布的行,即,僅包含整數並且總和為n的行。(★★★)

100. 計算一個1維數組X的平均值, 要求使用自展法求95%的置信區間. (即,對數組重複N次取樣, 每次取樣更換部分元素, 然後計算每個樣本的平均值,最後計算均值上的百分位數) (★★★)

答案:https://aistudio.baidu.com/aistudio/projectDetail/118377

Tags: