Numpy冷門但超有用的方法

  1. 找出兩個一維數組中相同的元素
Z1 = np.random.randint(0, 10, 10)
Z2 = np.random.randint(0, 10, 10)
print("Z1:", Z1)
print("Z2:", Z2)
np.intersect1d(Z1, Z2)

result:
Z1: [2 5 2 4 6 5 9 3 7 4]
Z2: [7 4 8 6 2 8 7 3 7 8]
array([2, 3, 4, 6, 7])
  1. 使用五種不同的方法去提取一個隨機數組的整數部分:
Z = np.random.uniform(0, 10, 10)
print("原始值: ", Z)
print(Z % 1)
print("方法 1: ", Z - Z % 1)
print("方法 2: ", np.floor(Z))
print("方法 3: ", np.ceil(Z))
print("方法 4: ", Z.astype(int))
print("方法 5: ", np.trunc(Z))

result:
原始值:  [2.73346348 7.69828757 7.86482191 1.13211405 3.76974342 3.82244943
 8.48062002 0.40903781 9.41422722 3.56932426]
[0.73346348 0.69828757 0.86482191 0.13211405 0.76974342 0.82244943
 0.48062002 0.40903781 0.41422722 0.56932426]
方法 1:  [2. 7. 7. 1. 3. 3. 8. 0. 9. 3.]
方法 2:  [2. 7. 7. 1. 3. 3. 8. 0. 9. 3.]
方法 3:  [ 3.  8.  8.  2.  4.  4.  9.  1. 10.  4.]
方法 4:  [2 7 7 1 3 3 8 0 9 3]
方法 5:  [2. 7. 7. 1. 3. 3. 8. 0. 9. 3.]
  1. 找出隨機一維數組中出現頻率最高的值:
Z = np.random.randint(0, 10, 50)
print("隨機一維數組:", Z)
np.bincount(Z).argmax()

# 我們可以看到x中最大的數爲7,因此bin的數量爲8,那麼它的索引值爲0->7
#x = np.array([0, 1, 1, 3, 2, 1, 7])
# 索引0出現了1次,索引1出現了3次......索引5出現了0次......
#np.bincount(x)
#因此,輸出結果爲:array([1, 3, 1, 1, 0, 0, 0, 1])

result:
隨機一維數組: [1 7 7 1 1 6 6 2 7 5 4 2 5 2 6 4 8 6 7 0 6 6 1 3 8 1 9 1 4 2 6 2 2 6 4 3 7 0 8 5 3 5 3 6 9 1 7 7 7 7]
6
  1. 找出給定一維數組中非 0 元素的位置索引:
Z = np.nonzero([1, 0, 2, 0, 1, 0, 4, 0])
Z 

result:
(array([0, 2, 4, 6]),)
  1. 對於二維隨機數組中各元素,保留其 2 位小數:
Z = np.random.random((5, 5))
print(Z)

np.set_printoptions(precision=2)
Z

result:
[[0.60812241 0.73198034 0.94618522 0.38880087 0.57783975]
 [0.42269846 0.33792021 0.16684304 0.42144049 0.31045111]
 [0.1848732  0.00996782 0.92683269 0.80099087 0.14715122]
 [0.75994662 0.74667598 0.35267901 0.83163863 0.88817273]
 [0.12484054 0.22858327 0.52090342 0.38798047 0.82170694]]
array([[0.61, 0.73, 0.95, 0.39, 0.58],
       [0.42, 0.34, 0.17, 0.42, 0.31],
       [0.18, 0.01, 0.93, 0.8 , 0.15],
       [0.76, 0.75, 0.35, 0.83, 0.89],
       [0.12, 0.23, 0.52, 0.39, 0.82]])
  1. 使用 NumPy 找出百分位數(25%,50%,75%):
a = np.arange(15)
print(a)

np.percentile(a, q=[25, 50, 75])

result:
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
array([ 3.5,  7. , 10.5])
  1. 從隨機數組中刪除包含缺失值的行:
np.isnan(Z)

## result:
array([[False, False, False, False, False,  True, False, False, False,
        False],
       [False, False, False, False, False, False, False, False, False,
        False],
       [False, False, False, False, False, False, False, False, False,
        False],
       [False, False, False, False, False,  True, False, False, False,
        False],
       [False, False, False, False, False, False, False, False, False,
        False],
       [False, False,  True, False,  True, False, False, False, False,
        False],
       [False, False, False,  True, False, False, False, False, False,
        False],
       [False, False, False, False, False, False, False, False, False,
        False],
       [False, False, False, False, False, False, False, False, False,
        False],
       [False, False, False, False, False, False, False, False, False,
        False]])

np.sum(np.isnan(Z),axis = 1)	

# result:
array([1, 0, 0, 1, 0, 2, 1, 0, 0, 0])

Z[np.sum(np.isnan(Z), axis=1) == 0]
# So 這裏我們只需挑選出爲0的就行
  1. 使用 NumPy 計算變量直接的相關性係數:
Z = np.array([
    [1, 2, 1, 9, 10, 3, 2, 6, 7],  # 特徵 A
    [2, 1, 8, 3, 7, 5, 10, 7, 2],  # 特徵 B
    [2, 1, 1, 8, 9, 4, 3, 5, 7]])  # 特徵 C

np.corrcoef(Z)

# result:
array([[ 1.        , -0.05640533,  0.97094584],
       [-0.05640533,  1.        , -0.01315587],
       [ 0.97094584, -0.01315587,  1.        ]])
  1. 使用 NumPy 計算矩陣的特徵值和特徵向量:
M = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
w, v = np.linalg.eig(M)
# w 對應特徵值,v 對應特徵向量
w, v

#result:
(array([ 1.61168440e+01, -1.11684397e+00, -9.75918483e-16]), #一個數對應一列
 matrix([[-0.23197069, -0.78583024,  0.40824829],
         [-0.52532209, -0.08675134, -0.81649658],
         [-0.8186735 ,  0.61232756,  0.40824829]]))
  1. 使用 NumPy 計算 Ndarray 兩相鄰元素差值:
Z = np.random.randint(1, 10, 10)
print(Z)

# 計算 Z 兩相鄰元素差值
print(np.diff(Z, n=1))
# 重複計算 2 次
print(np.diff(Z, n=2)) 
# 重複計算 3 次
print(np.diff(Z, n=3))

# result:
[2 4 8 3 5 2 6 7 6 9]
[ 2  4 -5  2 -3  4  1 -1  3]
[ 2 -9  7 -5  7 -3 -2  4]
[-11  16 -12  12 -10   1   6]
  1. 使用 NumPy 將 Ndarray 相鄰元素依次累加:
Z = np.random.randint(1, 10, 10)
print(Z)

"""
[第一個元素, 第一個元素 + 第二個元素, 第一個元素 + 第二個元素 + 第三個元素, ...]
"""
np.cumsum(Z)

#result:
[5 1 8 5 8 4 6 2 9 4]
array([ 5,  6, 14, 19, 27, 31, 37, 39, 48, 52])
  1. 使用 NumPy 打印九九乘法表:
np.fromfunction(lambda i, j: (i + 1) * (j + 1), (9, 9))

#result:
array([[ 1.,  2.,  3.,  4.,  5.,  6.,  7.,  8.,  9.],
       [ 2.,  4.,  6.,  8., 10., 12., 14., 16., 18.],
       [ 3.,  6.,  9., 12., 15., 18., 21., 24., 27.],
       [ 4.,  8., 12., 16., 20., 24., 28., 32., 36.],
       [ 5., 10., 15., 20., 25., 30., 35., 40., 45.],
       [ 6., 12., 18., 24., 30., 36., 42., 48., 54.],
       [ 7., 14., 21., 28., 35., 42., 49., 56., 63.],
       [ 8., 16., 24., 32., 40., 48., 56., 64., 72.],
       [ 9., 18., 27., 36., 45., 54., 63., 72., 81.]])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章