利用Python進行數據分析_Pandas_Numpy高級應用

Numpy高級應用

1.ndarray對象內部機理

import pandas as pd
import numpy as np
from pandas import Series,DataFrame
import warnings
warnings.filterwarnings("ignore")

2.高級數組操作

arr = np.arange(8)
arr
array([0, 1, 2, 3, 4, 5, 6, 7])
arr_new = arr.reshape((4,2))
arr_new
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7]])
arr
array([0, 1, 2, 3, 4, 5, 6, 7])
# 數組的合併
a1 = np.arange(6).reshape(2,3)
a2 = np.arange(6).reshape(2,3)
a1
array([[0, 1, 2],
       [3, 4, 5]])
a2
array([[0, 1, 2],
       [3, 4, 5]])
a = np.concatenate([a1,a2],axis=0)
a
array([[0, 1, 2],
       [3, 4, 5],
       [0, 1, 2],
       [3, 4, 5]])
b = np.concatenate([a1,a2],axis=1)
b
array([[0, 1, 2, 0, 1, 2],
       [3, 4, 5, 3, 4, 5]])
# 數組的拆分
b
array([[0, 1, 2, 0, 1, 2],
       [3, 4, 5, 3, 4, 5]])
c1,c2,c3 = np.hsplit(b,[2,4])
c1
array([[0, 1],
       [3, 4]])
c2
array([[2, 0],
       [5, 3]])
c3
array([[1, 2],
       [4, 5]])

3.廣播

b
array([[0, 1, 2, 0, 1, 2],
       [3, 4, 5, 3, 4, 5]])
b.mean()
2.5
demened = b-b.mean()
demened
array([[-2.5, -1.5, -0.5, -2.5, -1.5, -0.5],
       [ 0.5,  1.5,  2.5,  0.5,  1.5,  2.5]])

廣播的原則

如果兩個數組的後緣維度 (trailing dimension,即從末尾開始算起的維度) 的軸長度相符或其中一方的長度爲1,則認爲它們是廣播兼容的。廣播會在缺失和 (或)長度爲1的維度上進行。

c = np.arange(12).reshape((4,3))
c
array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])

mean(0) 表示沿着第一個軸(通常是行)計算均值。對於一個矩陣,這將返回每列的均值。
mean(1) 表示沿着第一個軸(通常是列)計算均值。對於一個矩陣,這將返回每行的均值。
例如, 如果 c 是一個 3x4 的矩陣,c.mean(0) 將返回一個包含 4 個元素的數組,每個元素是相應列的均值。

row_means_x = c.mean(1)
row_means_x
array([ 1.,  4.,  7., 10.])
row_means_y = c.mean(0)
row_means_y
array([4.5, 5.5, 6.5])
row_means_x.reshape((4,1))
array([[ 1.],
       [ 4.],
       [ 7.],
       [10.]])
demened = c - row_means_x.reshape((4,1))
demened
array([[-1.,  0.,  1.],
       [-1.,  0.,  1.],
       [-1.,  0.,  1.],
       [-1.,  0.,  1.]])

案例

import numpy as np

# 創建一個三維數組 A,形狀爲 (3, 1, 4)
A = np.array([[[1, 2, 3, 4]] * 1, [[5, 6, 7, 8]] * 1, [[9, 10, 11, 12]] * 1])

# 創建一個一維數組 B,形狀爲 (4,)
B = np.array([0, 1, 2, 3])

# 廣播數組 B 到數組 A
result = A + B

# 輸出結果
print(result)

[[[ 1  3  5  7]]

 [[ 5  7  9 11]]

 [[ 9 11 13 15]]]

假設我們有一個三維數組 A 和一個二維數組 B,它們的形狀分別爲 (3, 2, 4) 和 (2, 4)。我們將嘗試對它們進行相加操作,利用廣播規則。

import numpy as np

# 創建一個三維數組 A,形狀爲 (3, 2, 4)
A = np.random.randint(1, 10, size=(3, 2, 4))

# 創建一個二維數組 B,形狀爲 (2, 4)
B = np.array([[1, 2, 3, 4],
              [5, 6, 7, 8]])

# 廣播數組 B 到數組 A
result = A + B

# 輸出原始數組 A 和 B
print("Array A:")
print(A)
print("\nArray B:")
print(B)

# 輸出廣播後的結果數組
print(result)

Array A:
[[[7 6 2 3]
  [3 6 9 3]]

 [[4 6 6 9]
  [9 8 9 7]]

 [[3 7 1 7]
  [2 2 2 8]]]

Array B:
[[1 2 3 4]
 [5 6 7 8]]

Broadcasted Result:
[[[ 8  8  5  7]
  [ 8 12 16 11]]

 [[ 5  8  9 13]
  [14 14 16 15]]

 [[ 4  9  4 11]
  [ 7  8  9 16]]]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章