這些有用的片段在面試中會(huì)經(jīng)常出現(xiàn),也可以作為日常的numpy練習(xí)。
1、導(dǎo)入numpy
2、打印numpy信息
print(np.__version__) np.show_config()
3、創(chuàng)建空向量
4、獲取numpy 函數(shù)的文檔
python -c 'import numpy; numpy.info(numpy.add)'
5、創(chuàng)建大小為10但第5個(gè)值為1的空向量
6、創(chuàng)建一個(gè)值從10到49的向量
Z = np.arange(10,50) print(Z)
7、反轉(zhuǎn)一個(gè)向量(第一個(gè)元素變成最后一個(gè)元素)
8、創(chuàng)建一個(gè)值從0到8的3x3矩陣
Z = np.arange(9).reshape(3,3) print(Z)
9、從[1,2,0,0,4,0]中找到非零元素的下標(biāo)
10、創(chuàng)建一個(gè)3x3單位矩陣
Z = np.eye(3) print(Z)
11、創(chuàng)建一個(gè)帶有隨機(jī)值的3x3x3數(shù)組
12、創(chuàng)建一個(gè)帶有隨機(jī)值的10x10數(shù)組,并找到最小值和最大值
Z = np.random.random((10,10)) Zmin, Zmax = Z.min(), Z.max() print(Zmin, Zmax)
13、創(chuàng)建一個(gè)大小為30的隨機(jī)向量,并找出平均值
14、創(chuàng)建一個(gè)邊界為1,內(nèi)部為0的2d數(shù)組
Z = np.ones((10,10)) Z[1:-1,1:-1] = 0
15 、下面表達(dá)式的結(jié)果是什么?
16、創(chuàng)建一個(gè)5 × 5矩陣,對(duì)角線值為1,2,3,4
Z = np.diag(1+np.arange(4),k=-1) print(Z)
17、創(chuàng)建一個(gè)8x8的矩陣,并使用0,1間隔填充
18、一個(gè)(6,7,8)形狀數(shù)組,第100個(gè)元素的下標(biāo)(x,y,z)是多少?
print(np.unravel_index(100,(6,7,8)))
19、使用tile函數(shù)創(chuàng)建一個(gè)8x8的0,1間隔填充矩陣
20、標(biāo)準(zhǔn)化一個(gè)5x5隨機(jī)矩陣
Z = np.random.random((5,5)) Zmax, Zmin = Z.max(), Z.min() Z = (Z - Zmin)/(Zmax - Zmin) print(Z)
21、創(chuàng)建一個(gè)自定義的dtype,將顏色描述為4個(gè)unisgned字節(jié)(RGBA)
22、將一個(gè)5x3矩陣乘以一個(gè)3x2矩陣(實(shí)矩陣乘積)
Z = np.dot(np.ones((5,3)), np.ones((3,2))) print(Z)
23、給定一個(gè)一維數(shù)組,對(duì)3到8之間的所有元素求反、
24、以下腳本的輸出是什么?
# Author: Jake VanderPlas print(sum(range(5),-1)) from numpy import * print(sum(range(5),-1)) ##結(jié)果 :10
25、整數(shù)向量Z,下面哪個(gè)表達(dá)式是合法的?
26、下列表達(dá)式的結(jié)果是什么?
np.array(0) // np.array(0) np.array(0) // np.array(0.) np.array(0) / np.array(0) np.array(0) / np.array(0.)
27、如何四舍五入?
28、 使用 5 種不同的方法提取隨機(jī)數(shù)組的整數(shù)部分
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))
29、 創(chuàng)建一個(gè)值范圍為 0 到 4的 5x5 矩陣
30 、 創(chuàng)建生成器函數(shù),生成 10 個(gè)整數(shù)并使用它來構(gòu)建一個(gè)數(shù)組
def generate(): for x in xrange(10): yield x Z = np.fromiter(generate(),dtype=float,count=-1) print(Z)
31、 創(chuàng)建一個(gè)大小為 10 的向量,其值范圍為 0 到 1(均不包括在內(nèi))
32、 創(chuàng)建一個(gè)大小為 10 的隨機(jī)向量并對(duì)其進(jìn)行排序
Z = np.random.random(10) Z.sort() print(Z)
33、 如何比 np.sum 更快地求和一個(gè)小數(shù)組?
34、 考慮檢查兩個(gè)隨機(jī)數(shù)組 A 和 B是否相等
A = np.random.randint(0,2,5) B = np.random.randint(0,2,5) equal = np.allclose(A,B) print(equal)
35、 使數(shù)組不可變(只讀)
36、 一個(gè)表示笛卡爾坐標(biāo)的隨機(jī) 10x2 矩陣,將它們轉(zhuǎn)換為極坐標(biāo)
X,Y = Z[:,0], Z[:,1] R = np.sqrt(X**2+Y**2) T = np.arctan2(Y,X) print(R) print(T)
37、 創(chuàng)建大小為 10 的隨機(jī)向量并將最大值替換為 0
38、 創(chuàng)建一個(gè)結(jié)構(gòu)化數(shù)組,其中 x 和坐標(biāo)覆蓋 [0,1]x[0,1] 區(qū)域
Z = np.zeros((10,10), [('x',float),('y',float)]) Z['x'], Z['y'] = np.meshgrid(np.linspace(0,1,10), np.linspace(0,1,10))print(Z)
39、 給定兩個(gè)數(shù)組 X 和 Y,構(gòu)造柯西矩陣 C (Cij = 1/(xi yj))
40 、 打印每個(gè) numpy 標(biāo)量類型的最小和最大可表示值
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)
41、 如何打印數(shù)組的所有值?
42、 如何在數(shù)組中找到最接近的值(到給定的標(biāo)量)?
Z = np.arange(100) v = np.random.uniform(0,100) index = (np.abs(Z-v)).argmin() print(Z[index])
43 、 創(chuàng)建表示位置 (x,y) 和顏色 (r,g,b) 的結(jié)構(gòu)化數(shù)組
44、 逐點(diǎn)查找形狀為 (100,2) 的隨機(jī)向量表示坐標(biāo)的距離
Z = np.random.random((10,2)) X,Y = np.atleast_2d(Z[:,0]), np.atleast_2d(Z[:,1]) D = np.sqrt( (X-X.T)**2 + (Y-Y.T)**2) print(D) # Much faster with scipy import scipy # Thanks Gavin Heverly-Coulson (#issue 1) import scipy.spatial Z = np.random.random((10,2)) D = scipy.spatial.distance.cdist(Z,Z) print(D)
45 、 如何將浮點(diǎn)(32位)數(shù)組轉(zhuǎn)換為整數(shù)(32位)?
46 、 讀取下面格式的文件?
# ------------- 1,2,3,4,5 6,,,7,8 ,,9,10,11 # ------------- Z = np.genfromtxt('missing.dat', delimiter=',')
47 、 numpy 數(shù)組的枚舉可以用什么其他形式表示?
48、生成一個(gè)二維類高斯數(shù)組
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.0 G = np.exp(-( (D-mu)**2 / ( 2.0 * sigma**2 ) ) ) print(G)
49 、 如何在二維數(shù)組中隨機(jī)放置 p 個(gè)元素?
50、矩陣減去每一行的均值
# Author: Warren Weckesser X = np.random.rand(5, 10) # Recent versions of numpy Y = X - X.mean(axis=1, keepdims=True) # Older versions of numpy Y = X - X.mean(axis=1).reshape(-1, 1)
51、如何排序數(shù)組的第n列?
52、如何判斷一個(gè)給定的2D數(shù)組有空列?
# Author: Warren Weckesser Z = np.random.randint(0,3,(3,10)) print((~Z.any(axis=0)).any())
53、在數(shù)組中找到與給定值最近的值
54、創(chuàng)建一個(gè)具有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)
55、一個(gè)給定的向量,如何給第二個(gè)向量索引的每個(gè)元素加1(包含重復(fù)索引)?
56、如何積加一個(gè)向量(X)的元素到一個(gè)數(shù)組(F)基于索引列表(I)?
# Author: Alan G Isaac X = [1,2,3,4,5,6] I = [1,3,9,3,4,1] F = np.bincount(I,X) print(F)
57、一個(gè)(w,h,3)圖像(dtype=ubyte),計(jì)算唯一顏色的數(shù)量
58、考慮一個(gè)四維數(shù)組,如何同時(shí)得到最后兩個(gè)軸的和?
A = np.random.randint(0,10,(3,4,3,4)) sum = A.reshape(A.shape[:-2] + (-1,)).sum(axis=-1) print(sum)
59、一個(gè)一維向量D,使用子集相同大小的向量S來計(jì)算D子集的平均值?
60 、 如何獲得點(diǎn)積的對(duì)角線?
# Author: Mathieu Blondel # Slow version np.diag(np.dot(A, B)) # Fast version np.sum(A * B.T, axis=1) # Faster version np.einsum('ij,ji->i', A, B).
61、 向量 [1, 2, 3, 4, 5],構(gòu)建一個(gè)新向量,每個(gè)值之間有 3 個(gè)連續(xù)的0?
62、 維度為 (5,5,3) 的數(shù)組,將它乘以一個(gè)維度為 (5,5) 的數(shù)組?
A = np.ones((5,5,3)) B = 2*np.ones((5,5)) print(A * B[:,:,None])
63、 交換數(shù)組的兩行?
64、 一組描述 10 個(gè)三角形(具有共享頂點(diǎn))的 10 個(gè)三元組,找到組成所有三角形的唯一線段集
# Author: Nicolas P. Rougier 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)
65 、 一個(gè) bincount數(shù)組 C,如何生成一個(gè)數(shù)組 A 使得np.bincount(A) == C?
66、 使用數(shù)組上的滑動(dòng)窗口計(jì)算平均值?
# Author: Jaime Fernández del Río def moving_average(a, n=3) : ret = np.cumsum(a, dtype=float) ret[n:] = ret[n:] - ret[:-n] return ret[n - 1:] / n Z = np.arange(20) print(moving_average(Z, n=3))
67、 一維數(shù)組 Z,構(gòu)建一個(gè)二維數(shù)組,其第一行是 (Z[0],Z[1],Z[2]),隨后的每一行移動(dòng) 1(最后一行應(yīng)該是 (Z[3] ,Z[2],Z[1])
68、 如何對(duì)布爾值取反,或更改浮點(diǎn)數(shù)的符號(hào)?
# Author: Nathaniel J. Smith Z = np.random.randint(0,2,100) np.logical_not(arr, out=arr) Z = np.random.uniform(-1.0,1.0,100) np.negative(arr, out=arr)
69 、 考慮 2 組點(diǎn) P0,P1 描述線 (2d) 和一個(gè)點(diǎn) p,如何計(jì)算從 p 到每條線 i (P0[i],P1[i]) 的距離?
70 、 2 組點(diǎn) P0,P1 描述線 (2d) 和一組點(diǎn) P,如何計(jì)算從每個(gè)點(diǎn) j (P[j]) 到每條線 i (P0[i],P1[i]) 的距離?
# Author: Italmassov Kuanysh # based on distance function from previous question P0 = 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])
71、 一個(gè)任意數(shù)組,編寫一個(gè)函數(shù)來提取具有固定形狀并以給定元素為中心的子部分(必要時(shí)可以使用填充值填充)
72、 一個(gè)數(shù)組 Z = [1,2,3,4,5,6,7,8,9,10,11,12,13,14],如何生成一個(gè)數(shù)組 R = [[1,2,3, 4], [2,3,4,5], [3,4,5,6], ..., [11,12,13,14]]?
# Author: Stefan van der Walt Z = np.arange(1,15,dtype=uint32) R = stride_tricks.as_strided(Z,(11,4),(4,4)) print(R)
73、 計(jì)算矩陣秩
74、 如何找到數(shù)組中出現(xiàn)頻率最高的值?
Z = np.random.randint(0,10,50) print(np.bincount(Z).argmax())
75 、 從隨機(jī) 10x10 矩陣中提取所有連續(xù)的 3x3 塊
76 、 創(chuàng)建一個(gè)二維數(shù)組子類,使得 Z[i,j] == Z[j,i]
# Author: Eric O. Lebigot # Note: only works for 2d array and value setting using indices class Symetric(np.ndarray): def __setitem__(self, (i,j), value): 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] = 42 print(S)
77、 一組形狀為 (n,n) 的 p 個(gè)矩陣和一組形狀為 (n,1) 的 p 個(gè)向量、 如何一次計(jì)算 p 個(gè)矩陣乘積之和?(結(jié)果具有形狀(n,1))
78 、 考慮一個(gè) 16x16 數(shù)組,如何獲得塊的和(塊大小為 4x4)?
# Author: Robert Kern Z = np.ones(16,16) k = 4 S = 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)
79 、 如何使用 numpy 數(shù)組實(shí)現(xiàn) Game of Life?
80、獲得數(shù)組的n個(gè)最大的值
Z = np.arange(10000) np.random.shuffle(Z) n = 5 # Slow print (Z[np.argsort(Z)[-n:]]) # Fast print (Z[np.argpartition(-Z,n)[:n]])
81、構(gòu)建笛卡爾積(每個(gè)項(xiàng)的每個(gè)組合)
82、從一個(gè)常規(guī)數(shù)組創(chuàng)建一個(gè)records數(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')
83、一個(gè)大向量Z,使用3種不同的方法計(jì)算Z的3次方
84、形狀為(8,3)和(2,2)的兩個(gè)數(shù)組A和B、如何在A中找到包含B每一行元素的行不管B中元素的順序是什么?
# Author: Gabe Schwartz A = np.random.randint(0,5,(8,3)) B = np.random.randint(0,5,(2,2)) C = (A[..., np.newaxis, np.newaxis] == B) rows = (C.sum(axis=(1,2,3)) >= B.shape[1]).nonzero()[0] print(rows)
85、一個(gè)10x3矩陣,提取不相等值的行(例如[2,2,3])
86、將一個(gè)int型向量轉(zhuǎn)換為一個(gè)矩陣二進(jìn)制表示形式
# Author: Warren Weckesser I = 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. McDonald I = np.array([0, 1, 2, 3, 15, 16, 32, 64, 128], dtype=np.uint8) print(np.unpackbits(I[:, np.newaxis], axis=1))
87、給定一個(gè)二維數(shù)組,如何提取唯一的行?
88、考慮兩個(gè)向量A和B,使用einsum求sum、* 、inner、outer
# Author: Alex Riley # Make sure to read: http://ajcr.net/Basic-guide-to-einsum/ np.einsum('i->', A) # np.sum(A) np.einsum('i,i->i', A, B) # A * B np.einsum('i,i', A, B) # np.inner(A, B) np.einsum('i,j', A, B) # np.outer(A, B)
89 、 由兩個(gè)向量(X,Y)描述的路徑,如何使用等距樣本對(duì)其進(jìn)行采樣?
90 、 給定一個(gè)整數(shù) n 和一個(gè)二維數(shù)組 X,從 X 中選擇可以解釋為從具有 n 度的多項(xiàng)分布中抽取的行,即僅包含整數(shù)且總和為 n 的行、
# Author: Evgeni Burovski 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 = 4 M = np.logical_and.reduce(np.mod(X, 1) == 0, axis=-1) M &= (X.sum(axis=-1) == n) print(X[M])
以上代碼整理自:https://github.com/rougier/numpy-100 有刪減和修改,需要的話可以star原項(xiàng)目
聯(lián)系客服