數據科學中100個Numpy代碼技巧

2021-01-11 不靠譜的貓

NumPy是Python語言的擴展庫,支持許多高維數組和矩陣的操作。此外,它還為數組操作提供了許多數學函數庫。機器學習涉及到對數組的大量轉換和操作,這使得NumPy成為必不可少的工具之一。

下面的100個練習都是從numpy郵件列表、stack overflow和numpy文檔中收集的。

1.以np的名稱導入numpy包(★☆☆)

import numpy as np

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

print(np.__version__)np.show_config()

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

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

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

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

5.如何從命令行獲取numpy add函數的文檔?(★☆☆)

%run `python -c "import numpy; numpy.info(numpy.add)"`

6.創建一個大小為10的空矢量,第五個值為1(★☆☆)

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

7.創建一個向量,其值的範圍是10到49(★☆☆)

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

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

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

9.創建一個從0到8的3 * 3矩陣(★☆☆)

x = np.arange(0,9).reshape(3,3)

10.查找來自[1,2,0,0,4,0]的非零元素的索引(★☆☆)

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

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

Z = np.eye(3)

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

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

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

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

14.創建一個大小為30的隨機向量,並找到平均值(★☆☆)

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

15.創建一個邊界為1,內部為0的二維數組(★☆☆)

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

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

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

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

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

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

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

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

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

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

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

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

Z = np.random.random((5,5))Z = (Z - np.mean (Z)) / (np.std (Z))

23.創建一個自定義dtype,將顏色描述為四個unsigned bytes(RGBA)(★☆☆)

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

Z241 = np.dot(np.ones((5,3)), np.ones((3,2)))print(Z241)# Alternative solution, in Python 3.5 and aboveZ242 = np.ones((5,3)) @ np.ones((3,2))print(Z242)

25.給定一維數組,將3到8之間的所有元素乘以-1。(★☆☆)

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

26.以下腳本的輸出是什麼?(★☆☆)

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

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

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

29.如何round away from zero一個浮點數組(★☆☆)

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

30.如何找到兩個數組之間的公共值?(★☆☆)

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

31.如何忽略所有numpy警告(不建議)?(★☆☆)

# Suicide mode ondefaults = np.seterr(all="ignore")Z = np.ones(1) / 0# Back to sanity_ = np.seterr(**defaults)# Equivalently with a context managernz1 = np.nonzero([1,2,0,0,4,0])print(nz1)

32.以下表達式是否正確?(★☆☆)

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

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

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

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

35.如何就地計算((A + B)*(-A / 2))(without copy)?(★★☆)

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

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

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(★★☆)

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

38.考慮一個生成器函數,該函數生成10個整數並使用它來構建數組(★☆☆)

39.創建一個大小為10的向量,其值的範圍從0到1,0和1都排除在外(★★☆)

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

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

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

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

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

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

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

Z43 = np.zeros(10)Z43.flags.writeable = FalseZ43[0] = 1

44.考慮一個表示笛卡爾坐標的隨機10x2矩陣,將其轉換為極坐標(★★☆)

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.創建大小為20的隨機向量,並將最大值替換為0(★★☆)

Z = np.random.random(20)Z[Z.argmax()] = 0

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

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

47.給定兩個數組X和Y,構造柯西矩陣C(Cij = 1 /(xi_yj))

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

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

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

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

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

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

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

52.考慮一個形狀(100,2)表示坐標的隨機向量,逐點查找距離(★★☆)

53.如何將浮點數(32位)數組轉換為整數(32位)?

Z = (np.random.rand(10)*100).astype(np.float32)Y = Z.view(np.int32)Y[:] = Zprint(Y)

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

55. numpy數組的枚舉等效於什麼?(★★☆)

56.生成通用的類似於2D的高斯數組(★★☆)

X, Y = np.meshgrid(np.linspace(-1,1,10), np.linspace(-1,1,10))D = np.sqrt(X*X+Y*Y)sigma, mu = 1.0, 0.0G = np.exp(-( (D-mu)**2 / ( 2.0 * sigma**2 ) ) )print(G)

57.如何在2D數組中隨機放置p個元素?(★★☆)

n = 10p = 3Z57 = np.zeros((n,n))np.put(Z57, np.random.choice(range(n*n), p, replace=False),1)print(Z57)

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

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

Z59 = np.random.randint(0,10,(3,3))print(Z59)print(Z59[Z59[:,1].argsort()])

60.如何判斷給定的2D數組是否有空列?(★★☆)

Z = np.random.randint(0,3,(3,10))print((~Z.any(axis=0)).any())

61.從數組中的給定值中找到最接近的值(★★☆)

Z = np.random.uniform(0,1,10)z = 0.5m61 = Z.flat[np.abs(Z - z).argmin()]print(m61)

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

A = np.arange(3).reshape(3,1)B = np.arange(3).reshape(1,3)it = np.nditer([A,B,None])for x,y,z in it: z[...] = x + yprint(it.operands[2])

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

64.對於給定的向量,如何為第二個向量索引的每個元素添加1(注意重複索引)?(★★★)

65.如何基於索引列表(I)將向量(X)的元素累積到數組(F)中?(★★★)

X = [1,2,3,4,5,6]I = [1,3,9,3,4,1]F = np.bincount(I,X)print(F)

66.考慮一個(dtype = ubyte)的(w,h,3)圖像,計算唯一顏色的數量(★★★)

w,h = 16,16I = np.random.randint(0,2,(h,w,3)).astype(np.ubyte)F = I[...,0]*256*256 + I[...,1]*256 +I[...,2]n = len(np.unique(F))print(np.unique(I))

67.考慮一個四維數組,如何一次獲得最後兩個軸的和?(★★★)

68.考慮一維向量D,如何使用描述子集指標的相同大小的向量S來計算D子集的均值?(★★★)

69.如何獲得點積的對角線?(★★★)

A = np.random.uniform(0,1,(5,5))B = np.random.uniform(0,1,(5,5))# Slow version np.diag(np.dot(A, B))# Fast versionnp.sum(A * B.T, axis=1)# Faster versionnp.einsum("ij,ji->i", A, B)

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

Z = np.array([1,2,3,4,5])nz = 3Z0 = np.zeros(len(Z) + (len(Z)-1)*(nz))Z0[::nz+1] = Zprint(Z0)

71.考慮一個維度為(5,5,3)的數組,如何將它與維度為(5,5)的數組相乘以?(★★★)

A = np.ones((5,5,3))B = 2*np.ones((5,5))print(A * B[:,:,None])

72.如何交換數組的兩行?(★★★)

A = np.arange(25).reshape(5,5)A[[0,1]] = A[[1,0]]print(A)

73.考慮一組描述10個三角形(具有共享頂點)的10個三元組,找到組成所有三角形的唯一線段集(★★★)

faces = np.random.randint(0,100,(10,3))F = np.roll(faces.repeat(2,axis=1),-1,axis=1)F = F.reshape(len(F)*3,2)F = np.sort(F,axis=1)G = F.view( dtype=[('p0',F.dtype),('p1',F.dtype)] )G = np.unique(G)

74.給定一個數組C,為bincount,如何生成一個數組n使得np.bincount(A)== C?(★★★)

C = np.bincount([1,1,2,3,4,4,6])A74 = np.repeat(np.arange(len(C)), C)print(A74)

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

76.考慮一維數組Z,構建一個二維數組,其第一行是(Z [0],Z [1],Z [2]),隨後的每一行都移位1(最後一行應為( Z [-3],Z [-2],Z [-1])(★★★)

77.如何取反布爾值,或如何改變浮點符號?(★★★)

Z = np.random.randint(0,2,100)np.logical_not(Z, out=Z)Z = np.random.uniform(-1.0,1.0,100)np.negative(Z, out=Z)

78.考慮描述線(2d)的2組點(P0、P1)和點P,如何計算從p到每條線i的距離(P0 [i],P1 [i])?(★★★)

79.考慮描述線(2d)的2組點(P0、P1)和一組點P,如何計算從每個點j(P [j])到每個線i(P0 [i],P1 [i]的距離) )?(★★★)

# based on distance function from previous questionP0 = np.random.uniform(-10, 10, (10,2))P1 = np.random.uniform(-10,10,(10,2))p = np.random.uniform(-10, 10, (10,2))print(np.array([distance(P0,P1,p_i) for p_i in p]))

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

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]]?(★★★)

Z = np.arange(1,15,dtype=np.uint32)R = stride_tricks.as_strided(Z,(11,4),(4,4))

82.計算矩陣秩(★★★)

Z = np.random.uniform(0,1,(10,10))U, S, V = np.linalg.svd(Z) # Singular Value Decompositionrank = np.sum(S > 1e-10)print(rank)

83.如何在數組中查找最頻繁的值?

Z = np.random.randint(0,10,50)print(np.bincount(Z).argmax())

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

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

86.考慮一組形狀為(n,n)的p個矩陣和一組形狀為(n,1)的p個向量。如何一次計算p個矩陣乘積的總和?(結果的形狀為(n,1))(★★★)

87.考慮一個16x16的數組,如何獲得塊總和(塊大小為4x4)?(★★★)

88.如何使用numpy數組實現「生命遊戲」?(★★★)

89.如何獲取數組的n個最大值(★★★)

Z = np.arange(10000)np.random.shuffle(Z)n = 5# Slowprint (Z[np.argsort(Z)[-n:]])# Fastprint (Z[np.argpartition(-Z,n)[:n]])

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

91.如何從常規數組創建記錄數組?(★★★)

92.考慮一個大向量Z,用3種不同的方法計算Z的3次方(★★★)

x = np.random.rand(int(5e7))%timeit np.power(x,3)%timeit x*x*x%timeit np.einsum('i,i,i->i',x,x,x)

93.考慮兩個形狀為(8,3)和(2,2)的數組A和B。如何找到A的行包含B的每一行的元素,而不考慮B中元素的順序?(★★★)

A = np.random.randint(0,5,(8,3))B = np.random.randint(0,5,(2,2))C = (A[..., np.newaxis, np.newaxis] == B)rows = np.where(C.any((3,1)).all(1))[0]print(rows)

94.考慮一個10x3矩陣,提取不等值的行(例如[2,2,3])(★★★)

95.將整數向量轉換為矩陣二進位表示形式(★★★)

96.給定二維數組,如何提取unique行?(★★★)

97.考慮兩個向量A和B,寫出inner、outer、sum和mul函數的einsum等價(★★★)

98.考慮由兩個向量(X,Y)描述的路徑,如何使用等距樣本進行採樣(★★★)

99.給定一個整數n和一個二維數組X,從X中選擇可以解釋為n次多項式分布的行,即僅包含整數且總和為n的行。(★★★)

100.計算一維數組X的平均值的自舉95%置信區間(即,對數組中的元素重新取樣N次,計算每個樣本的平均值,然後計算平均值的百分比)。(★★★)

謝謝閱讀!!:)

相關焦點

  • 4個Python初學者必學的Numpy小技巧
    下面小芯就基於實踐整理出了Python初學者應該學習的4個numpy技巧,它們能夠幫助你編寫更簡潔易讀的代碼。在學習numpy技巧之前,請確保已熟悉以下文章中的一些Python內置功能。1. 掩碼數組——選擇數據集是不完善的,它們總是包含缺失或無效記錄的數組,而這些記錄是時常需要忽略的。例如,由於傳感器故障,氣象站的測量值可能包含缺失值。
  • numpy中的數據類型對象有哪些
    Numpy數據類型numpy是一個python擴展包,它可以為我們提供更精確的科學技術,更強大的數學能力。為此,numpy定義了比python更豐富的數據類型來達成目的。數據類型以上就是一系列Numpy中提供的數據類型。需要理解的是,Numpy中的數據類型,和python本身的數據類型是不同的。Numpy中的數據類型,實質是數據類型對象dtype的實例。
  • 零基礎學Python—你應該知道的Numpy小技巧
    今天我們來介紹Python中一個非常常用的包,Numpy。這個包可以說對於數據科學家來說也是必備的一個包,對於做人工智慧的同學們,這個包也是使用頻度非常高的。那麼我們今天就來看一下這個包的一些小技巧。前面我也寫過Pandas的兩篇文章,反響也非常不錯,看起來大家對於這種小技巧類的文章還是比較感興趣的。
  • 數據分析-numpy庫快速了解
    1.numpy是什麼庫NumPy是一個開源的Python科學計算基礎庫,包含: 一個強大的N維數組對象 ndarray 廣播功能函數 整合C/C++/Fortran代碼的工具 線性代數、傅立葉變換、隨機數生成等功能
  • python數據科學系列:numpy入門詳細教程
    數據科學基礎庫主要是三劍客:numpy,pandas以及matplotlib,每個庫都集成了大量的方法接口,配合使用功能強大。本篇先從numpy開始,對numpy常用的方法進行思維導圖式梳理,多數方法僅拉單列表,部分接口輔以解釋說明及代碼案例。最後分享了個人關於axis和廣播機制的理解。本文知識要點一級菜單
  • Python學習第112課——numpy中數組查找元素和改變元素的小技巧
    上節我們學習了如何利用index找到ndarray數組中的一些元素,並把找到的元素生成一個新的ndarray。代碼如下:現在我們學習幾個用index找到ndarray中元素的小技巧。★技巧1:★技巧2:以上兩種寫法運行結果都是:以上兩種簡寫技巧,相當於從h中找到元素時,通過兩個list[0,1,2]和[2,1,0],每個list的元素一一對應,分別取出第1行第3列、第2行第2列、第3行第1列的元素,三個元素分別為3、5、7。相當於h[]中的第一個list是代表元素所在行,第二個list代表元素所在列。
  • 值得收藏的 NumPy 小抄表(含主要語法、代碼)
    ,包括:3、用於整合C/C++和Fortran代碼的工具包;4、實用的線性代數、傅立葉變換和隨機數生成函數。numpNumPy(Numeric Python)提供了許多高級的數值編程工具,如:矩陣數據類型、矢量處理,以及精密的運算庫。專為進行嚴格的數字處理而產生。多為很多大型金融公司使用,以及核心的科學計算組織如:Lawrence Livermore,NASA用其處理一些本來使用C++,Fortran或Matlab等所做的任務。本文整理了一個Numpy的小抄表,總結了Numpy的常用操作,可以收藏慢慢看。
  • Python,Numpy,Pandas……數據科學家必備排序技巧
    Vanilla Python中唯一使用的排序算法是Timsort。Timsort會根據要排序的數據特徵選擇排序方法。舉個例子,如果排短列表,就採用插入排序。Timsort以及Vanilla Python的其他算法都很穩定。這意味著如果有多個相同值,這些數據在排序後仍維持原始順序。
  • Python數據分析之numpy數組全解析
    5.2 bool索引6 numpy中賦值、視圖、深複製什麼是numpy numpy是一個在Python中做科學計算的基礎庫,重在數值計算,也是大部分Python科學計算庫的基礎庫,多用於大型、多維數據上執行數值計算。
  • Python學習第113課——numpy中用條件判斷去篩選數組中的元素
    之前我們學習了如何在numpy中查找數組元素的方法和技巧,現在我們學習如何用條件判斷的方式篩選數組的元素。●numpy中的數組可以直接進行比較直接上代碼:運行結果:我們看到,condition列印出來,它的結構和h的結構一樣。
  • D01 Numpy簡介,為什麼Numpy那麼快
    Numpy幾乎可以說是Python科學計算的基石,一些強大機器學習或科學計算庫都是基於Numpy,例如scikit-learn,pandas等。Numpy是一個基礎的科學計算包Numpy的核心是ndarray對象ndarray封裝了Python的數組ndarray的幾個特點ndarray是一個多維數組ndarray在創建之初便固定了大小,如果更改ndarray對象的大小,本質上是先新增後刪除。ndarray中的元素需要相同的數據類型。
  • 給訓練踩踩油門:編寫高效的PyTorch代碼技巧
    構建高效的自定義數據加載類上一節介紹了如何寫出更加高效的 PyTorch 的代碼,但為了讓你的代碼運行更快,將數據更加高效加載到內存中也是非常重要的。幸運的是 PyTorch 提供了一個很容易加載數據的工具,即 DataLoader 。
  • Python編程:如何規範numpy中數組元素的列印輸出格式
    引言對於Python語言開發者,如果你經常處理大量數據運算的話,numpy是一個必不可少的程序擴展庫,它支持大維度數組與矩陣運算,提供了非常豐富的數學運算函數,並且,相對於Python自身提供的列表類型,它在運算速度上有著無與倫比的優勢。
  • Python數據分析類庫系列-Numpy之多維數組ndarray
    NumPy之於數值計算特別重要的原因之一,是因為它可以高效處理大數組的數據。 這是因為: NumPy是在一個連續的內存塊中存儲數據,獨立於其他Python內置對象。NumPy的C語言編寫的算法庫可以操作內存,而不必進行類型檢查或其它前期工作。
  • 大數據分析Python NumPy庫使用教程
    NumPy 的前身 Numeric 最早是由 Jim Hugunin 與其它協作者共同開發,2005 年,Travis Oliphant 在 Numeric 中結合了另一個同性質的程序庫 Numarray 的特色,並加入了其它擴展而開發了 NumPy。NumPy 為開放原始碼並且由許多協作者共同維護開發。
  • 使用Matplotlib可視化數據的5個強大技巧
    數據可視化用於以更直接的表示方式顯示數據,並且更易於理解。它可以用柱狀圖、散點圖、折線圖、餅圖等形式形成。許多人仍然使用Matplotlib作為後端模塊來可視化他們的圖形。在這個故事中,我將給你一些技巧,使用Matplotlib創建一個優秀圖表的5個強大技巧。1.
  • Python學習第117課——numpy中dot的運用舉例
    上節我們學習了最基礎的matrix的運算,可能有小夥伴覺得這都要涉及高等數學知識了,確實如果你想做數據科學、做人工智慧,統計學、概率論等數學知識,尤其是算法是繞不過去的坎,但是不要怕!!!我們現在入門階段知道有這個概念就行,能解決實際問題就行,後面遇到了問題再去深入。現在我們是為了入門,入門之後,你可以根據自身的底子去選擇發展方向。
  • 入門|數據科學初學者必知的NumPy基礎知識
    本文介紹了一些 NumPy 基礎知識,適合數據科學初學者學習掌握。NumPy(Numerical Python)是 Python 中的一個線性代數庫。對每一個數據科學或機器學習 Python 包而言,這都是一個非常重要的庫,SciPy(Scientific Python)、Mat-plotlib(plotting library)、Scikit-learn 等都在一定程度上依賴 NumPy。對數組執行數學運算和邏輯運算時,NumPy 是非常有用的。在用 Python 對 n 維數組和矩陣進行運算時,NumPy 提供了大量有用特徵。
  • 不懂NumPy 算什麼 Python 程式設計師?|CSDN 博文精選
    事實上,NumPy 的數據組織結構,尤其是數組(numpy.ndarray),幾乎已經成為所有數據處理與可視化模塊的標準數據結構了(這一點,類似於在機器學習領域 Python 幾乎已經成為首選工具語言)。
  • 數據科學中需要知道的5個關於奇異值分解(SVD)的應用
    我經常聽到我大學的熟人抱怨他們花了很多時間的代數方程在現實世界中基本沒用。好吧,但我可以向你保證,並不是這樣的。特別是如果你想開啟數據科學的職業生涯。線性代數彌合了理論與概念實際實施之間的差距。對線性代數的掌握理解打開了我們認為無法理解的機器學習算法的大門。線性代數的一種這樣的用途是奇異值分解(SVD)用於降維。你在數據科學中一定很多次遇到SVD。