Python3:numpy的簡單使用4(矩陣間的操作,合併數組,分割數組,讀取文件操作)

聲明

當前的知識用於本人複習使用,當前的內容涉及到,numpy中矩陣間的操作,數組間的合併以及分割,還有使用numpy讀取txt格式的文件並執行數據操作

1.數組間的合併與分割操作

# 合併以及分割
# 假設具有這樣一段數據,三家店的營業額
marks = [[110, 115, 112],
         [108, 109, 100],
         [119, 120, 130]
         ]

# 以上存在這樣的數據(這是三家店三天的營業額),現在需要添加剩餘兩天的數據(也就是顯示一週的數據)
two_days_marks = [[100, 120],
                  [115, 100],
                  [100, 110]]

# 現在顯示三家店五天的營業額
import numpy as np

# 使用hstack合併,爲水平方向的合併操作
five_days_marks = np.hstack([marks, two_days_marks])
print(five_days_marks)
print()
# 現在又開了兩家店 需要數據5家店五天的營業額
two_marks = [[100, 101, 102, 103, 104],
             [105, 106, 107, 108, 109]]

five_marks = np.vstack([five_days_marks, two_marks])
print(five_marks)
# 使用vstack合併,爲垂直方向的合併

# 輸出總和
five_matrix = np.matrix(five_marks)
s = np.matrix([[1], [1], [1], [1], [1]])
print(five_matrix * s)

# 使用 當前的concatenate合併
a = [
    [1, 2, 3],
    [4, 5, 6]
]
b = [[7, 8, 9]]
c = [[4, 5, 6], [7, 8, 9]]
result = np.concatenate([a, b], axis=0)  # 0表示y軸的合併
print(result)
result = np.concatenate([a, c], axis=1)  # 1 表示x軸的合併
print(result)

print("開始執行分割數據的操作")
# 使用分割
np_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
print(np.split(np_array, 3))  # 發現按照3等分進行分割,分成了三組數據
# print(np.split(np_array,6)) # 數組拆分不會導致等分,說明這個分割就是等分的分割操作,如果不能分割成相同的等分就會報錯

print(np.split(np_array, [2, 4, 6, 8])) # 按照指定的下標的方式分割當前的數據

結果:
在這裏插入圖片描述

總結:

1.在使用當前合併操作的時候需要指定是水平方向還是垂直方向的合併

2.使用np.hstack()實現水平方向的合併,使用np.vstack()方法實現垂直方向的合併,還可以使用np.concatenate()方法並指定axis方式合併

3.分割數組使用np.split方法,可以指定當前的參數,指定分割的段數,和按照當前的下標的方式進行分割

2.矩陣間的操作(乘法操作)

矩陣就是一個維度爲2的數組,並且水平的數據都相同,就像一個矩形一樣的數據

## 當前的矩陣間的操作
# 1. 矩陣間的乘法操作爲(假設舉證a=(2,3)表示當前的形狀爲2行3列的數據,b=(3,2)表示當前的形狀爲3行2列的數據),當前的乘法操作結果爲:2,2兩行兩列的數據

a = [[1, 2, 3], [4, 5, 6]]
b = [[1, 2],
     [3, 4],
     [5, 6]]
# 上述的數據中的數據就是一個(2,3)和(3,2),這兩個矩陣相乘的結果爲:2,2
# 現在開始矩陣間的乘法操作
# 1. 創建矩陣
import numpy as np

a_matrix = np.matrix(a)
b_matrix = np.matrix(b)
c_result = a_matrix * b_matrix
print(c_result.shape)
print(c_result)
# 當前的結果爲(2,2) [[22,28],[49,64]]
# 當前的運算爲:[[1*1+2*3+3*5=22 ,1*2+2*4+3*6=28],[4*1+5*3+6*5=49,4*2+5*4+6*6=64]]
# 這個計算爲a中的第一個數組中的每個數乘以對應的b中的每一行的和獲得的數據就是結果中的第一個數組,a中的第二個數組中的每個數乘以b中每一列中的每一個數的和就是結果中的第二個數組

# 假設存在這樣一組數據,三家連鎖店三天的營業額,其中第一個店的利潤爲總利潤的50%,第二個店爲20%,最後一個店爲30%,求三天實際利潤
marks = [[114, 112, 118],
         [105, 110, 120],
         [118, 119, 105]]

# 分析,當前的marks中的數據爲3,3這個形狀,需要變成 3,1這種類型,所以需要將這個矩陣與形狀3,1這個矩陣進行相乘
points = [[0.5],
          [0.2],
          [0.3]]

# 開始計算
marks_matrix = np.matrix(marks)
points_matrix = np.matrix(points)
print("當前操作的結果爲:{}".format(marks_matrix * points_matrix))
# 當前的操作正確

結果:
在這裏插入圖片描述
總結:

1.要實現當前矩陣間的乘法操做,需要將當前的矩陣使用np.matrix()方法將一個普通的二維數組轉化成可以計算的矩陣才行

2.進行操作的時候需要遵守運算規則(a,b) * (b*c)=(a,c)這種模式,否則可能不能運算

3.使用numpy讀取文件並操作數據

數據文件:datas.txt
在這裏插入圖片描述

# 使用numpy執行當前的文件讀取操作
import numpy as np

# 讀取文件的操作使用np.genformtxt就是讀取普通的txt的文本文件
read_np_array = np.genfromtxt("datas.txt", delimiter=",", dtype=np.int32)
print(read_np_array)
# 輸出當前讀取後的數據類型
print(read_np_array.dtype)  # 默認爲 float64添加 dtype=np.int32後結果爲int32

# 輸出當前的nparray中的形狀
print("輸出當前讀取數據的類型:{}".format(read_np_array.shape))

# 輸出層數據的最大值
print(read_np_array.max())

# 求出當前的的前兩天的數據
print("輸出5家店鋪前兩天的銷售金額:{}".format(read_np_array[:5, :2]))
print("輸出第三家店後三天的銷售金額:{}".format(read_np_array[2, 2:]))

print("輸出當前每家店鋪的5天中的銷售最大值:{}".format(read_np_array.max(axis=1)))

print("輸出當前這五天中的每天的銷售最大值:{}".format(read_np_array.max(axis=0)))

print("輸出銷售金額大於115的銷售金額:{}".format(read_np_array[read_np_array > 115]))

print("輸出當前的銷售總額:{}".format(read_np_array.sum()))
# print("輸出銷售金額大於115的金額所在的索引:{}".format(np.))

print("輸出每家店的銷售總額:{}".format(read_np_array.sum(axis=1)))

print("輸出第一天的銷售總額:{}".format(read_np_array.sum(axis=0)[0]))

# 使用矩陣乘法 (5,5) * (5,1) = (5,1)
data = [
    [0.2],
    [0.2],
    [0.2],
    [0.2],
    [0.2],
]
print(np.matrix(read_np_array) * np.matrix(data))

結果:
在這裏插入圖片描述

總結:

1.讀取數據文件使用np.genfromtxt()方法從一個文本文件中讀取數據,並指定分隔符delimiter,還可以指定dtype方式按照指定的類型讀取(不指定默認爲float64,如果是字符默認爲nan)

4.總結

1.使用numpy對矩陣以及數組間的操作需要遵循規則,否則就會報錯

2.numpy對同一類型的數據操作具有優勢,如果類型不同就會出現問題

3.使用numpy可以很容易的讀取並操作數據

以上純屬個人見解,如有問題請聯繫本人!

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