NumPy是Python語言的擴(kuò)展庫,,支持許多高維數(shù)組和矩陣的操作,。此外,它還為數(shù)組操作提供了許多數(shù)學(xué)函數(shù)庫,。機(jī)器學(xué)習(xí)涉及到對數(shù)組的大量轉(zhuǎn)換和操作,,這使得NumPy成為必不可少的工具之一,。 下面的100個練習(xí)都是從numpy郵件列表、stack overflow和numpy文檔中收集的,。 1.以np的名稱導(dǎo)入numpy包(★☆☆) import numpy as np 2.打印numpy版本和配置(★☆☆)
3.創(chuàng)建一個大小為10的空向量(★☆☆) Z = np.zeros(10)print(Z) 4.如何找到任何數(shù)組的內(nèi)存大?。ā铩睢睿?/strong>
5.如何從命令行獲取numpy add函數(shù)的文檔?(★☆☆) %run `python -c 'import numpy; numpy.info(numpy.add)'` 6.創(chuàng)建一個大小為10的空矢量,,第五個值為1(★☆☆)
7.創(chuàng)建一個向量,,其值的范圍是10到49(★☆☆) Z = np.arange(10,50)print(Z) 8.反轉(zhuǎn)向量(第一個元素變?yōu)樽詈笠粋€)(★☆☆)
9.創(chuàng)建一個從0到8的3 * 3矩陣(★☆☆) x = np.arange(0,9).reshape(3,3)print(x) 10.查找來自[1,2,0,0,4,0]的非零元素的索引(★☆☆)
11.創(chuàng)建一個3 * 3的單位矩陣(★☆☆) Z = np.eye(3)print(Z) 12.創(chuàng)建一個具有隨機(jī)值的3x3x3數(shù)組(★☆☆)
13.創(chuàng)建一個具有隨機(jī)值的10x10數(shù)組,并找到最小值和最大值(★☆☆) Z = np.random.random((10,10))Zmin, Zmax = Z.min(), Z.max()print(Zmin, Zmax) 14.創(chuàng)建一個大小為30的隨機(jī)向量,,并找到平均值(★☆☆)
15.創(chuàng)建一個邊界為1,,內(nèi)部為0的二維數(shù)組(★☆☆) Z = np.ones((10,10))Z[1:-1,1:-1] = 0print(Z) 16.如何在現(xiàn)有數(shù)組周圍添加邊框(用0填充)?(★☆☆)
17.以下表達(dá)式的結(jié)果是什么,?(★☆☆) 0 * np.nannp.nan == np.nannp.inf > np.nannp.nan - np.nannp.nan in set([np.nan])0.3 == 3 * 0.1print(0 * np.nan)print(np.nan == np.nan)print(np.inf > np.nan)print(np.nan - np.nan)print(np.nan in set([np.nan]))print(0.3 == 3 * 0.1) 18.創(chuàng)建一個5x5矩陣,,對角線正下方的值為(1、2,、3,、4)(★☆☆)
19.創(chuàng)建一個8x8矩陣,并用棋盤圖案填充它(★☆☆) Z = np.zeros((8,8),dtype=int)Z[1::2,::2] = 1Z[::2,1::2] = 1print(Z) 20.考慮一個形狀為(6,7,8)的數(shù)組,,第100個元素的索引(x,,y,,z)是什么,?(★☆☆)
21.使用tile函數(shù)創(chuàng)建一個棋盤格8x8矩陣(★☆☆) Z = np.tile( np.array([[0,1],[1,0]]), (4,4))print(Z) 22.歸一化一個5x5隨機(jī)矩陣(★☆☆)
23.創(chuàng)建一個自定義dtype,將顏色描述為四個unsigned bytes(RGBA)(★☆☆) color = np.dtype([('r', np.ubyte, 1), ('g', np.ubyte, 1), ('b', np.ubyte, 1), ('a', np.ubyte, 1)]) 24.將5x3矩陣乘以3x2矩陣(實矩陣乘積)(★☆☆)
25.給定一維數(shù)組,,將3到8之間的所有元素乘以-1,。(★☆☆) Z = np.arange(11)Z[(3 < Z) & (Z < 8)] *= -1print(Z) 26.以下腳本的輸出是什么,?(★☆☆)
27.考慮一個整數(shù)向量Z,以下哪個表達(dá)式是合法的,?(★☆☆) Z**Z2 << Z >> 2Z <- Z1j*ZZ/1/1Z<Z>ZZ**Z2 << Z >> 2Z <- Z1j*ZZ/1/1Z<Z>Z 28.以下表達(dá)式的結(jié)果是什么,?
29.如何round away from zero一個浮點數(shù)組(★☆☆) Z = np.random.uniform(-10,+10,10)print (np.copysign(np.ceil(np.abs(Z)), Z)) 30.如何找到兩個數(shù)組之間的公共值?(★☆☆)
31.如何忽略所有numpy警告(不建議),?(★☆☆) # Suicide mode ondefaults = np.seterr(all='ignore')Z = np.ones(1) / 0# Back to sanity_ = np.seterr(**defaults)# Equivalently with a context managernz = np.nonzero([1,2,0,0,4,0])print(nz) 32.以下表達(dá)式是否正確,?(★☆☆)
33.如何獲取昨天,今天和明天的日期,?(★☆☆) yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')today = np.datetime64('today', 'D')tomorrow = np.datetime64('today', 'D') + np.timedelta64(1, 'D') 34.如何獲取與2016年7月對應(yīng)的所有日期,?(★★☆)
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種不同方法(★★☆)提取隨機(jī)數(shù)組的整數(shù)部分
37.創(chuàng)建一個5x5矩陣,,其行值范圍為0到4(★★☆) Z = np.zeros((5,5))Z += np.arange(5)print(Z) 38.考慮一個生成器函數(shù),,該函數(shù)生成10個整數(shù)并使用它來構(gòu)建數(shù)組(★☆☆)
39.創(chuàng)建一個大小為10的向量,其值的范圍從0到1,,0和1都排除在外(★★☆) Z = np.linspace(0,1,11,endpoint=False)[1:]print(Z) 40.創(chuàng)建一個大小為10的隨機(jī)向量并將其排序(★★☆)
41.如何求和一個比np.sum快的小數(shù)組,?(★★☆) Z = np.arange(10)np.add.reduce(Z) 42.考慮兩個隨機(jī)數(shù)組A和B,檢查它們是否相等(★★☆)
43.使數(shù)組不可變(只讀)(★★☆) Z = np.zeros(10)Z.flags.writeable = FalseZ[0] = 1 44.考慮一個表示笛卡爾坐標(biāo)的隨機(jī)10x2矩陣,,將其轉(zhuǎn)換為極坐標(biāo)(★★☆)
45.創(chuàng)建大小為10的隨機(jī)向量,,并將最大值替換為0(★★☆) Z = np.random.random(10)Z[Z.argmax()] = 0print(Z) 46.創(chuàng)建一個結(jié)構(gòu)化數(shù)組,x和y坐標(biāo)覆蓋[0,1]x[0,1]區(qū)域(★★☆)
47.給定兩個數(shù)組X和Y,,構(gòu)造柯西矩陣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標(biāo)量類型的最小和最大可表示值(★★☆)
49.如何打印數(shù)組的所有值,?(★★☆) np.set_printoptions(threshold=np.nan)Z = np.zeros((16,16))print(Z) 50.如何找到向量中最接近給定標(biāo)量的值?(★★☆)
51.創(chuàng)建一個結(jié)構(gòu)化的數(shù)組,,表示位置(x,,y)和顏色(r,g,,b)(★★☆) Z = np.zeros(10, [ ('position', [ ('x', float, 1), ('y', float, 1)]), ('color', [ ('r', float, 1), ('g', float, 1), ('b', float, 1)])])print(Z) 52.考慮一個形狀(100,2)表示坐標(biāo)的隨機(jī)向量,,逐點查找距離(★★☆)
53.如何將浮點數(shù)(32位)數(shù)組轉(zhuǎn)換為整數(shù)(32位)? Z = (np.random.rand(10)*100).astype(np.float32)Y = Z.view(np.int32)Y[:] = Zprint(Y)
55. numpy數(shù)組的枚舉等效于什么,?(★★☆) Z = np.arange(9).reshape(3,3)for index, value in np.ndenumerate(Z): print(index, value)for index in np.ndindex(Z.shape): print(index, Z[index]) 56.生成通用的類似于2D的高斯數(shù)組(★★☆)
57.如何在2D數(shù)組中隨機(jī)放置p個元素?(★★☆) n = 10p = 3Z = np.zeros((n,n))np.put(Z, np.random.choice(range(n*n), p, replace=False),1)print(Z) 58.減去矩陣的每一行的均值(★★☆)
59.如何按第n列對數(shù)組排序,?(★★☆) Z = np.random.randint(0,10,(3,3))print(Z)print(Z[Z[:,1].argsort()]) 60.如何判斷給定的2D數(shù)組是否有空列,?(★★☆)
61.從數(shù)組中的給定值中找到最接近的值(★★☆) Z = np.random.uniform(0,1,10)z = 0.5m = Z.flat[np.abs(Z - z).argmin()]print(m) 62.考慮兩個形狀為(1,3)和(3,1)的數(shù)組,如何使用迭代器計算它們的總和,?(★★☆)
63.創(chuàng)建一個具有name屬性的數(shù)組類(★★☆) class NamedArray(np.ndarray): def __new__(cls, array, name='no name'): obj = np.asarray(array).view(cls) obj.name = name return obj def __array_finalize__(self, obj): if obj is None: return self.info = getattr(obj, 'name', 'no name')Z = NamedArray(np.arange(10), 'range_10')print (Z.name) 64.對于給定的向量,,如何為第二個向量索引的每個元素添加1(注意重復(fù)索引)?(★★★)
65.如何基于索引列表(I)將向量(X)的元素累積到數(shù)組(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)圖像,,計算唯一顏色的數(shù)量(★★★)
67.考慮一個四維數(shù)組,如何一次獲得最后兩個軸的和,?(★★★) A = np.random.randint(0,10,(3,4,3,4))# solution by passing a tuple of axes (introduced in numpy 1.7.0)sum = A.sum(axis=(-2,-1))print(sum)# solution by flattening the last two dimensions into one# (useful for functions that don't accept tuples for axis argument)sum = A.reshape(A.shape[:-2] + (-1,)).sum(axis=-1)print(sum) 68.考慮一維向量D,,如何使用描述子集指標(biāo)的相同大小的向量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],,如何構(gòu)建一個在每個值之間有3個連續(xù)零的新向量?(★★★)
71.考慮一個維度為(5,5,3)的數(shù)組,如何將它與維度為(5,5)的數(shù)組相乘以,?(★★★) A = np.ones((5,5,3))B = 2*np.ones((5,5))print(A * B[:,:,None]) 72.如何交換數(shù)組的兩行,?(★★★)
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)print(G) 74.給定一個數(shù)組C,,為bincount,,如何生成一個數(shù)組n使得np.bincount(A)== C?(★★★)
75.如何使用數(shù)組上的滑動窗口計算平均值,?(★★★) def moving_average(a, n=3) : ret = np.cumsum(a, dtype=float) ret[n:] = ret[n:] - ret[:-n] return ret[n - 1:] / nZ = np.arange(20)print(moving_average(Z, n=3)) 76.考慮一維數(shù)組Z,,構(gòu)建一個二維數(shù)組,其第一行是(Z [0],,Z [1],,Z [2]),隨后的每一行都移位1(最后一行應(yīng)為( 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.考慮一個任意的數(shù)組,,編寫一個函數(shù)來提取形狀固定的子部分并以給定元素為中心(必要時使用fill值填充)(★★★)
81.考慮數(shù)組Z = [1,2,3,4,5,6,7,8,9,10,11,12,13,14],,如何生成數(shù)組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))print(R) 82.計算矩陣的Rank(★★★)
83.如何在數(shù)組中查找最頻繁的值? Z = np.random.randint(0,10,50)print(np.bincount(Z).argmax()) 84.從隨機(jī)的10x10矩陣(★★★)中提取所有連續(xù)的3x3 blocks
85.創(chuàng)建一個2D數(shù)組子類,,使得Z [i,,j] == Z [j,i](★★★) # Note: only works for 2d array and value setting using indicesclass Symetric(np.ndarray): def __setitem__(self, index, value): i,j = index super(Symetric, self).__setitem__((i,j), value) super(Symetric, self).__setitem__((j,i), value)def symetric(Z): return np.asarray(Z + Z.T - np.diag(Z.diagonal())).view(Symetric)S = symetric(np.random.randint(0,10,(5,5)))S[2,3] = 42print(S) 86.考慮一組形狀為(n,,n)的p個矩陣和一組形狀為(n,,1)的p個向量。如何一次計算p個矩陣乘積的總和,?(結(jié)果的形狀為(n,,1))(★★★)
87.考慮一個16x16的數(shù)組,如何獲得塊總和(塊大小為4x4),?(★★★) Z = np.ones((16,16))k = 4S = np.add.reduceat(np.add.reduceat(Z, np.arange(0, Z.shape[0], k), axis=0), np.arange(0, Z.shape[1], k), axis=1)print(S) 88.如何使用numpy數(shù)組實現(xiàn)“生命游戲”,?(★★★)
89.如何獲取數(shù)組的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.給定任意數(shù)量的向量,構(gòu)建笛卡爾積(每一項的每一個組合)(★★★)
91.如何從常規(guī)數(shù)組創(chuàng)建記錄數(shù)組,?(★★★) Z = np.array([('Hello', 2.5, 3), ('World', 3.6, 2)])R = np.core.records.fromarrays(Z.T, names='col1, col2, col3', formats = 'S8, f8, i8')print(R) 92.考慮一個大向量Z,,用3種不同的方法計算Z的3次方(★★★)
93.考慮兩個形狀為(8,3)和(2,2)的數(shù)組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.將整數(shù)向量轉(zhuǎn)換為矩陣二進(jìn)制表示形式(★★★) # Author: Warren WeckesserI = np.array([0, 1, 2, 3, 15, 16, 32, 64, 128])B = ((I.reshape(-1,1) & (2**np.arange(8))) != 0).astype(int)print(B[:,::-1])# Author: Daniel T. McDonaldI = np.array([0, 1, 2, 3, 15, 16, 32, 64, 128], dtype=np.uint8)print(np.unpackbits(I[:, np.newaxis], axis=1)) 96.給定二維數(shù)組,如何提取unique行,?(★★★)
97.考慮兩個向量A和B,,寫出inner、outer,、sum和mul函數(shù)的einsum等價(★★★) A = np.random.uniform(0,1,10)B = np.random.uniform(0,1,10)np.einsum('i->', A) # np.sum(A)np.einsum('i,i->i', A, B) # A * Bnp.einsum('i,i', A, B) # np.inner(A, B)np.einsum('i,j->ij', A, B) # np.outer(A, B) 98.考慮由兩個向量(X,Y)描述的路徑,,如何使用等距樣本進(jìn)行采樣(★★★)
99.給定一個整數(shù)n和一個二維數(shù)組X,從X中選擇可以解釋為n次多項式分布的行,,即僅包含整數(shù)且總和為n的行,。(★★★) X = np.asarray([[1.0, 0.0, 3.0, 8.0], [2.0, 0.0, 1.0, 1.0], [1.5, 2.5, 1.0, 0.0]])n = 4M = np.logical_and.reduce(np.mod(X, 1) == 0, axis=-1)M &= (X.sum(axis=-1) == n)print(X[M]) 100.計算一維數(shù)組X的平均值的自舉95%置信區(qū)間(即,對數(shù)組中的元素重新取樣N次,,計算每個樣本的平均值,,然后計算平均值的百分比)。(★★★)
謝謝閱讀??!:) |
|