<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Numpy闖關100題,我闖了95關。

          共 33406字,需瀏覽 67分鐘

           ·

          2021-08-09 19:12

          在下方公眾號后臺回復:面試手冊,可獲取杰哥匯總的 3 份面試 PDF 手冊。
          自:數(shù)據(jù)不追牛
          鏈接:https://mp.weixin.qq.com/s/iyRjPLwxM2NVrgXKOacLTQ
          對于Numpy,我講的不多,因為和Pandas相比,他距離日常的數(shù)據(jù)處理更“遠”一些。
          但是,Numpy仍然是Python做數(shù)據(jù)分析所必須要掌握的基礎庫之一,以下題是github上的開源項目,主要為了檢測你的Numpy能力,同時對你的學習作為一個補充。
          來源:https://github.com/rougier/numpy-100

          1. 導入numpy庫并取別名為np (★☆☆)

          (提示: import … as …)
          import numpy as np

          2. 打印輸出numpy的版本和配置信息 (★☆☆)

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

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

          (提示: np.zeros)
          Z = np.zeros(10)
          print(Z)

          4. 如何找到任何一個數(shù)組的內(nèi)存大???(★☆☆)

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

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

          (提示: np.info)
          import numpy
          numpy.info(numpy.add)

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

          (提示: array[4])
          Z = np.zeros(10)
          Z[4] = 1
          print(Z)

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

          (提示: np.arange)
          Z = np.arange(10,50)
          print(Z)

          8.  反轉一個向量(第一個元素變?yōu)樽詈笠粋€) (★☆☆)

          (提示: array[::-1])
          Z = np.arange(50)
          Z = Z[::-1]
          print(Z)

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

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

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

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

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

          (提示: np.eye)
          Z = np.eye(3)
          print(Z)

          12. 創(chuàng)建一個 3x3x3的隨機數(shù)組 (★☆☆)

          (提示: np.random.random)
          Z = np.random.random((3,3,3))
          print(Z)

          13. 創(chuàng)建一個 10x10 的隨機數(shù)組并找到它的最大值和最小值 (★☆☆)

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

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

          (提示: mean)
          Z = np.random.random(30)
          m = Z.mean()
          print(m)

          15. 創(chuàng)建一個二維數(shù)組,其中邊界值為1,其余值為0 (★☆☆)

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

          16. 對于一個存在在數(shù)組,如何添加一個用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)
          (提示:NaN : 不是一個數(shù),inf : 無窮)
          # 表達式                           # 結果
          0 * np.nan                        nan
          np.nan == np.nan                  False
          np.inf > np.nan                   False
          np.nan - np.nan                   nan
          0.3 == 3 * 0.1                    False

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

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

          19. 創(chuàng)建一個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) 形狀的數(shù)組,其第100個元素的索引(x,y,z)是什么?

          (提示: np.unravel_index)
          print(np.unravel_index(100,(6,7,8)))

          21. 用tile函數(shù)去創(chuàng)建一個 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. 創(chuàng)建一個將顏色描述為(RGBA)四個無符號字節(jié)的自定義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. 給定一個一維數(shù)組,對其在3到8之間的所有元素取反 (★☆☆)

          (提示: >, <=)
          Z = np.arange(11)
          Z[(3 < Z) & (Z <= 8)] *= -1
          print(Z)

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

          (提示: np.sum)
          # Author: Jake VanderPlas               # 結果

          print(sum(range(5),-1))                 9
          from numpy import *                     
          print(sum(range(5),-1))                 10    #numpy.sum(a, axis=None)

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

          (提示:這里還有“位運算符”)
          Z**Z                        True
          2 << Z >> 2                 False
          Z <- Z                      True
          1j*Z                        True  #復數(shù)           
          Z/1/1                       True
          Z<Z>Z                       False

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

          np.array(0) / np.array(0)                           nan
          np.array(0) // np.array(0)                          0
          np.array([np.nan]).astype(int).astype(float)        -2.14748365e+09

          29. 如何從零位開始舍入浮點數(shù)組?(★☆☆)

          (提示: np.uniform, np.copysign, np.ceil, np.abs)
          # Author: Charles R Harris

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

          30. 如何找出兩個數(shù)組公共的元素? (★☆☆)

          (提示: np.intersect1d)
          Z1 = np.random.randint(01010)
          Z2 = np.random.randint(01010)
          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)

          # 另一個等價的方式, 使用上下文管理器(context manager)
          with np.errstate(divide='ignore'):
              Z = np.ones(1) / 0

          32. 下面的表達式是否為真? (★☆☆)

          (提示: 虛數(shù))
          np.sqrt(-1) == np.emath.sqrt(-1)     Faslse

          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')

          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) * 1
          C = np.ones(3) * 1
          np.add(A, B, out=B)
          np.divide(A, 2, out=A)
          np.negative(A, out=A)
          np.multiply(A, B, out=A)

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

          (提示: %, np.floor, np.ceil, astype, np.trunc)
          Z = np.random.uniform(01010)
          print (Z - Z % 1)
          print (np.floor(Z))
          print (np.cell(Z)-1)
          print (Z.astype(int))
          print (np.trunc(Z))

          37. 創(chuàng)建一個5x5的矩陣且每一行的值范圍為從0到4 (★★☆)

          (提示: np.arange)
          Z = np.zeros((55))
          Z += np.arange(5)
          print (Z)

          38. 如何用一個生成10個整數(shù)的函數(shù)來構建數(shù)組 (★☆☆)

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

          39. 創(chuàng)建一個大小為10的向量, 值域為0到1,不包括0和1 (★★☆)

          (提示: np.linspace)
          Z = np.linspace(0112, endpoint=True)[1-1]
          print (Z)

          40. 創(chuàng)建一個大小為10的隨機向量,并把它排序 (★★☆)

          (提示: sort)
          Z = np.random.random(10)
          Z.sort()
          print (Z)

          41.  對一個小數(shù)組進行求和有沒有辦法比np.sum更快? (★★☆)

          (提示: np.add.reduce)
          # Author: Evgeni Burovski

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

          # np.add.reduce 是numpy.add模塊中的一個ufunc(universal function)函數(shù),C語言實現(xiàn)

          42. 如何判斷兩和隨機數(shù)組相等 (★★☆)

          (提示: np.allclose, np.array_equal)
          A = np.random.randint(025)
          B = np.random.randint(025)

          # 假設array的形狀(shape)相同和一個誤差容限(tolerance)
          equal = np.allclose(A,B)
          print(equal)

          # 檢查形狀和元素值,沒有誤差容限(值必須完全相等)
          equal = np.array_equal(A,B)
          print(equal)

          43. 把數(shù)組變?yōu)橹蛔x (★★☆)

          (提示: flags.writeable)
          Z = np.zeros(5)
          Z.flags.writeable = False
          Z[0] = 1

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

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

          45. 創(chuàng)建一個大小為10的隨機向量并且將該向量中最大的值替換為0(★★☆)

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

          46. 創(chuàng)建一個結構化數(shù)組,其中x和y坐標覆蓋[0, 1]x[1, 0]區(qū)域 (★★☆)

          (提示: np.meshgrid)
          Z = np.zeros((55), [('x', float), ('y', float)])
          Z['x'], Z['y'] = np.meshgrid(np.linspace(015), np.linspace(015))
          print (Z)

          47. 給定兩個數(shù)組X和Y,構造柯西(Cauchy)矩陣C () (★★☆)

          (提示: np.subtract.outer)
          # Author: Evgeni Burovski

          X = np.arange(8)
          Y = X + 0.5
          C = 1.0 / np.subtract.outer(X, Y)
          print (C)
          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. 如何打印數(shù)組中所有的值?(★★☆)

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

          50. 如何在數(shù)組中找到與給定標量接近的值? (★★☆)

          (提示: argmin)
          Z = np.arange(100)
          v = np.random.uniform(0100)
          index = (np.abs(Z-v)).argmin()
          print(Z[index])

          51. 創(chuàng)建表示位置(x, y)和顏色(r, g, b, a)的結構化數(shù)組 (★★☆)

          (提示: dtype)
          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)的隨機向量,求出點與點之間的距離 (★★☆)

          (提示: np.atleast_2d, T, np.sqrt)
          Z = np.random.random((1002))
          X, Y = np.atleast_2d(Z[:, 0], Z[:, 1])
          D = np.sqrt((X-X.T)**2 + (Y-Y.T)**2)
          print (D)

          # 使用scipy庫可以更快
          import scipy.spatial

          Z = np.random.random((100,2))
          D = scipy.spatial.distance.cdist(Z,Z)
          print(D)

          53. 如何將類型為float(32位)的數(shù)組類型轉換位integer(32位)? (★★☆)

          (提示: astype(copy=False))
          Z = np.arange(10, dtype=np.int32)
          Z = Z.astype(np.float32, copy=False)
          print(Z)

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

          (提示: np.genfromtxt)
          12345
          6,  ,  , 78
           ,  , 9,10,11

          # 先把上面保存到文件example.txt中
          # 這里不使用StringIO, 因為Python2 和Python3 在這個地方有兼容性問題
          Z = np.genfromtxt("example.txt", delimiter=",")  
          print(Z)

          55. numpy數(shù)組枚舉(enumerate)的等價操作? (★★☆)

          (提示: np.ndenumerate, np.ndindex)
          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. 構造一個二維高斯矩陣(★★☆)

          (提示: np.meshgrid, np.exp)
          X, Y = np.meshgrid(np.linspace(-1110), np.linspace(-1110))
          D = np.sqrt(X**2 + Y**2)
          sigma, mu = 1.00.0
          G = np.exp(-( (D-mu)**2 / (2.0*sigma**2) ))
          print (G)

          57. 如何在二維數(shù)組的隨機位置放置p個元素? (★★☆)

          (提示: np.put, np.random.choice)
          # Author: Divakar

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

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

          (提示: mean(axis=,keepdims=))
          # Author: Warren Weckesser

          X = np.random.rand(510)

          # 新
          Y = X - X.mean(axis=1, keepdims=True)

          # 舊
          Y = X - X.mean(axis=1).reshape(-11)

          print(Y)

          59. 如何對數(shù)組通過第n列進行排序? (★★☆)

          (提示: argsort)
          # Author: Steve Tjoa

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

          60. 如何判斷一個給定的二維數(shù)組存在空列? (★★☆)

          (提示: any, ~)
          # Author: Warren Weckesser

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

          61. 從數(shù)組中找出與給定值最接近的值 (★★☆)

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

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

          (提示: np.nditer)
          A = np.arange(3).reshape(31)
          B = np.arange(3).reshape(13)
          it = np.nditer([A, B, None])
          for x, y, z in it:
              z[...] = x + y
          print (it.operands[2])

          63. 創(chuàng)建一個具有name屬性的數(shù)組類 (★★☆)

          (提示: class method)
          class NameArray(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 Nonereturn
                  self.info = getattr(obj, 'name'"no name")

          Z = NameArray(np.arange(10), "range_10")
          print (Z.name)

          64. 給定一個向量,如何讓在第二個向量索引的每個元素加1(注意重復索引)? (★★★)

          (提示: np.bincount | np.add.at)
          # Author: Brett Olsen

          Z = np.ones(10)
          I = np.random.randint(0,len(Z),20)
          Z += np.bincount(I, minlength=len(Z))
          print(Z)

          # Another solution
          # Author: Bartosz Telenczuk
          np.add.at(Z, I, 1)
          print(Z)

          65. 如何根據(jù)索引列表I將向量X的元素累加到數(shù)組F? (★★★)

          (提示: np.bincount)
          # 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)

          66. 思考(dtype = ubyte)的(w, h, 3)圖像,計算唯一顏色的值(★★★)

          (提示: np.unique)
          # Author: Nadav Horesh

          w,h = 16,16
          I = 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. 思考如何求一個四維數(shù)組最后兩個軸的數(shù)據(jù)和(★★★)

          (提示: sum(axis=(-2,-1)))
          A = np.random.randint(0,10,(3,4,3,4))
          # 傳遞一個元組(numpy 1.7.0)
          sum = A.sum(axis=(-2,-1))
          print(sum)

          # 將最后兩個維度壓縮為一個
          # (適用于不接受軸元組參數(shù)的函數(shù))
          sum = A.reshape(A.shape[:-2] + (-1,)).sum(axis=-1)
          print(sum)

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

          (提示: np.bincount)
          # Author: Jaime Fernández del Río

          D = np.random.uniform(0,1,100)
          S = np.random.randint(0,10,100)
          D_sums = np.bincount(S, weights=D)
          D_counts = np.bincount(S)
          D_means = D_sums / D_counts
          print(D_means)

          # Pandas solution as a reference due to more intuitive code
          import pandas as pd
          print(pd.Series(D).groupby(S).mean())

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

          (提示: np.diag)
          # Author: Mathieu Blondel

          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 version
          np.sum(A * B.T, axis=1)

          # Faster version
          np.einsum("ij,ji->i", A, B)

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

          (提示: array[::4])
          # Author: Warren Weckesser

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

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

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

          72. 如何對一個數(shù)組中任意兩行做交換? (★★★)

          (提示: array[[]] = array[[]])
          # Author: Eelco Hoogendoorn

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

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

          (提示: repeat, np.roll, np.sort, view, np.unique)
          # 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)

          74. 給定一個二進制的數(shù)組C,如何生成一個數(shù)組A滿足np.bincount(A)==C? (★★★)

          (提示: np.repeat)
          # Author: Jaime Fernández del Río

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

          75. 如何通過滑動窗口計算一個數(shù)組的平均數(shù)? (★★★)

          (提示: np.cumsum)
          # 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))

          76. 思考以為數(shù)組Z,構建一個二維數(shù)組,其第一行是(Z[0],Z[1],Z[2]), 然后每一行移動一位,最后一行為 (Z[-3],Z[-2],Z[-1]) (★★★)

          (提示: from numpy.lib import stride_tricks)
          # Author: Joe Kington / Erik Rigtorp
          from numpy.lib import stride_tricks

          def rolling(a, window):
              shape = (a.size - window + 1, window)
              strides = (a.itemsize, a.itemsize)
              return stride_tricks.as_strided(a, shape=shape, strides=strides)
          Z = rolling(np.arange(10), 3)
          print(Z)

          77. 如何對布爾值取反,或改變浮點數(shù)的符號(sign)? (★★★)

          (提示: np.logical_not, np.negative)
          # Author: Nathaniel J. Smith

          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. 思考兩組點集P0和P1去描述一組線(二維)和一個點p,如何計算點p到每一條線 i (P0[i],P1[i])的距離?(★★★)

          def distance(P0, P1, p):
              T = P1 - P0
              L = (T**2).sum(axis=1)
              U = -((P0[:,0]-p[...,0])*T[:,0] + (P0[:,1]-p[...,1])*T[:,1]) / L
              U = U.reshape(len(U),1)
              D = P0 + U*T - p
              return np.sqrt((D**2).sum(axis=1))

          P0 = np.random.uniform(-10,10,(10,2))
          P1 = np.random.uniform(-10,10,(10,2))
          p  = np.random.uniform(-10,10,( 1,2))
          print(distance(P0, P1, p))

          79. 考慮兩組點集P0和P1去描述一組線(二維)和一組點集P,如何計算每一個點 j(P[j]) 到每一條線 i (P0[i],P1[i])的距離? (★★★)

          # Author: Italmassov Kuanysh

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

          80. 思考一個任意的數(shù)組,編寫一個函數(shù),該函數(shù)提取一個具有固定形狀的子部分,并以一個給定的元素為中心(在該部分填充值) (★★★)

          (提示: minimum, maximum)
          # Author: Nicolas Rougier

          Z = np.random.randint(0,10,(10,10))
          shape = (5,5)
          fill  = 0
          position = (1,1)

          R = np.ones(shape, dtype=Z.dtype)*fill
          P  = np.array(list(position)).astype(int)
          Rs = np.array(list(R.shape)).astype(int)
          Zs = np.array(list(Z.shape)).astype(int)R_start = np.zeros((len(shape),)).astype(int)
          R_stop  = np.array(list(shape)).astype(int)
          Z_start = (P-Rs//2)
          Z_stop  = (P+Rs//2)+Rs%2

          R_start = (R_start - np.minimum(Z_start,0)).tolist()
          Z_start = (np.maximum(Z_start,0)).tolist()
          R_stop = np.maximum(R_start, (R_stop - np.maximum(Z_stop-Zs,0))).tolist()
          Z_stop = (np.minimum(Z_stop,Zs)).tolist()

          r = [slice(start,stop) for start,stop in zip(R_start,R_stop)]
          z = [slice(start,stop) for start,stop in zip(Z_start,Z_stop)]
          R[r] = Z[z]
          print(Z)
          print(R)

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

          (提示: stride_tricks.as_strided)
          # Author: Stefan van der Walt

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

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

          (提示: np.linalg.svd)
          # Author: Stefan van der Walt

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

          83. 如何找出數(shù)組中出現(xiàn)頻率最高的值?(★★★)

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

          84. 從一個10x10的矩陣中提取出連續(xù)的3x3區(qū)塊(★★★)

          (提示: stride_tricks.as_strided)
          # Author: Chris Barker

          Z = np.random.randint(0,5,(10,10))
          n = 3
          i = 1 + (Z.shape[0]-3)
          j = 1 + (Z.shape[1]-3)
          C = stride_tricks.as_strided(Z, shape=(i, j, n, n), strides=Z.strides + Z.strides)
          print(C)

          85.創(chuàng)建一個滿足 Z[i,j] == Z[j,i]的二維數(shù)組子類 (★★★)

          (提示: class method)
          # Author: Eric O. Lebigot
          # Note: only works for 2d array and value setting using indices

          class 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] = 42
          print(S)

          86. 考慮p個 nxn 矩陣和一組形狀為(n,1)的向量,如何直接計算p個矩陣的乘積(n,1)? (★★★)

          (提示: np.tensordot)
          # Author: Stefan van der Walt

          p, n = 1020
          M = np.ones((p,n,n))
          V = np.ones((p,n,1))
          S = np.tensordot(M, V, axes=[[02], [01]])
          print(S)

          # It works, because:
          # M is (p,n,n)
          # V is (p,n,1)
          # Thus, summing over the paired axes 0 and 0 (of M and V independently),
          # and 2 and 1, to remain with a (n,1) vector.

          87. 對于一個16x16的數(shù)組,如何得到一個區(qū)域的和(區(qū)域大小為4x4)? (★★★)

          (提示: np.add.reduceat)
          # 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)
          print(S)

          88. 如何利用numpy數(shù)組實現(xiàn)Game of Life? (★★★)

          (提示: Game of Life , Game of Life有哪些圖形?)
          # Author: Nicolas Rougier

          def iterate(Z):
              # Count neighbours
              N = (Z[0:-2,0:-2] + Z[0:-2,1:-1] + Z[0:-2,2:] +
                   Z[1:-1,0:-2]                + Z[1:-1,2:] +
                   Z[2:  ,0:-2] + Z[2:  ,1:-1] + Z[2:  ,2:])

              # Apply rules
              birth = (N==3) & (Z[1:-1,1:-1]==0)
              survive = ((N==2) | (N==3)) & (Z[1:-1,1:-1]==1)
              Z[...] = 0
              Z[1:-1,1:-1][birth | survive] = 1
              return Z

          Z = np.random.randint(0,2,(50,50))
          for i in range(100): Z = iterate(Z)
          print(Z)

          89. 如何找到一個數(shù)組的第n個最大值? (★★★)

          (提示: np.argsort | np.argpartition)
          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]])

          90. 給定任意個數(shù)向量,創(chuàng)建笛卡爾積(每一個元素的每一種組合) (★★★)

          (提示: np.indices)
          # Author: Stefan Van der Walt

          def cartesian(arrays):
              arrays = [np.asarray(a) for a in arrays]
              shape = (len(x) for x in arrays)

              ix = np.indices(shape, dtype=int)
              ix = ix.reshape(len(arrays), -1).T

              for n, arr in enumerate(arrays):
                  ix[:, n] = arrays[n][ix[:, n]]

              return ix

          print (cartesian(([123], [45], [67])))

          91. 如何從一個常規(guī)數(shù)組中創(chuàng)建記錄數(shù)組(record array)? (★★★)

          (提示: np.core.records.fromarrays)
          Z = np.array([("Hello"2.53),
                        ("World"3.62)])
          R = np.core.records.fromarrays(Z.T, 
                                         names='col1, col2, col3',
                                         formats = 'S8, f8, i8')
          print(R)

          92. 思考一個大向量Z, 用三種不同的方法計算它的立方 (★★★)

          (提示: np.power, *, np.einsum)
          # Author: Ryan G.

          x = np.random.rand(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)的數(shù)組A和B. 如何在數(shù)組A中找到滿足包含B中元素的行?(不考慮B中每行元素順序)?(★★★)

          (提示: np.where)
          # 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 = np.where(C.any((3,1)).all(1))[0]
          print(rows)

          94. 思考一個10x3的矩陣,如何分解出有不全相同值的行 (如 [2,2,3]) (★★★)

          # Author: Robert Kern

          Z = np.random.randint(0,5,(10,3))
          print(Z)
          # solution for arrays of all dtypes (including string arrays and record arrays)
          E = np.all(Z[:,1:] == Z[:,:-1], axis=1)
          U = Z[~E]
          print(U)
          # soluiton for numerical arrays only, will work for any number of columns in Z
          U = Z[Z.max(axis=1) != Z.min(axis=1),:]
          print(U)

          95. 將一個整數(shù)向量轉換為二進制矩陣 (★★★)

          (提示: np.unpackbits)
          # Author: Warren Weckesser

          I = np.array([012315163264128])
          B = ((I.reshape(-1,1) & (2**np.arange(8))) != 0).astype(int)
          print(B[:,::-1])

          # Author: Daniel T. McDonald

          I = np.array([012315163264128], dtype=np.uint8)
          print(np.unpackbits(I[:, np.newaxis], axis=1))

          96. 給定一個二維數(shù)組,如何提取出唯一的行?(★★★)

          (提示: np.ascontiguousarray)
          # Author: Jaime Fernández del Río

          Z = np.random.randint(0,2,(6,3))
          T = np.ascontiguousarray(Z).view(np.dtype((np.void, Z.dtype.itemsize * Z.shape[1])))
          _, idx = np.unique(T, return_index=True)
          uZ = Z[idx]
          print(uZ)

          97. 考慮兩個向量A和B,寫出用einsum等式對應的inner, outer, sum, mul函數(shù) (★★★)

          (提示: np.einsum)
          # Author: Alex Riley
          # Make sure to read: http://ajcr.net/Basic-guide-to-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 * B
          np.einsum('i,i', A, B)    # np.inner(A, B)
          np.einsum('i,j->ij', A, B)    # np.outer(A, B)

          98. 考慮一個由兩個向量描述的路徑(X,Y),如何用等距樣例(equidistant samples)對其進行采樣(sample)(★★★)?

          (提示: np.cumsum, np.interp)
          # Author: Bas Swinckels

          phi = np.arange(010*np.pi, 0.1)
          a = 1
          x = a*phi*np.cos(phi)
          y = a*phi*np.sin(phi)

          dr = (np.diff(x)**2 + np.diff(y)**2)**.5 # segment lengths
          r = np.zeros_like(x)
          r[1:] = np.cumsum(dr)                # integrate path
          r_int = np.linspace(0, r.max(), 200# regular spaced path
          x_int = np.interp(r_int, r, x)       # integrate path
          y_int = np.interp(r_int, r, y)

          99. 給定一個整數(shù)n 和一個二維數(shù)組X,從X中選擇可以被解釋為從多n度的多項分布式的行,即這些行只包含整數(shù)對n的和. (★★★)

          (提示: np.logical_and.reduce, np.mod)
          # Author: Evgeni Burovski

          X = np.asarray([[1.00.03.08.0],
                          [2.00.01.01.0],
                          [1.52.51.00.0]])
          n = 4
          M = np.logical_and.reduce(np.mod(X, 1) == 0, axis=-1)
          M &= (X.sum(axis=-1) == n)
          print(X[M])

          100. 對于一個一維數(shù)組X,計算它boostrapped之后的95%置信區(qū)間的平均值. (★★★)

          (提示: np.percentile)
          # Author: Jessica B. Hamrick

          X = np.random.randn(100# random 1D array
          N = 1000 # number of bootstrap samples
          idx = np.random.randint(0, X.size, (N, X.size))
          means = X[idx].mean(axis=1)
          confint = np.percentile(means, [2.597.5])
          print(confint)

          推薦閱讀

          最詳細的 Python 結合 RFM 模型實現(xiàn)用戶分層實操案例!

          超硬核!11 個非常實用的 Python 和 Shell 拿來就用腳本實例!

          太秀了!用Excel也能實現(xiàn)和Python數(shù)據(jù)分析一樣的功能!

          利用 Python 分析了某化妝品企業(yè)的銷售情況,我得出的結論是?

          這幾個用 Pyecharts 做出來的交互圖表,領導說叼爆了!

          看了這個總結,其實 Matplotlib 可視化,也沒那么難!

          瀏覽 27
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久天天夜夜操夜色AV麻豆 | 精品少妇在线刺激 | 黄色片一级 | 土豪胖哥酒店微信高价的御范气质身材苗条匀称 | 黄色考逼视频免费观看网站www |