#numpy 的屬性
import numpy as np
array = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]]) #定義了乙個二維矩陣
print(array)
print(array.ndim) #輸出矩陣的維度
print(array.shape) #輸出矩陣的形狀
print(array.size) #輸出矩陣的大小
print(array.dtype) #輸出矩陣的元素型別
#numpy 的索引
import numpy as np
arr1 = np.arange(2, 14)
print(arr1) #列印出arr1中的資料
print(arr1[2]) #索引出arr1中第二個 元素為4
print(arr1[1:4]) #第乙個到第三個位置的元素輸出
print(arr1[2:-1]) #第二個位置到負乙個位置的元素輸出
print(arr1[:5]) #預設從第0個數到第4個
arr2 = arr1.reshape(3, 4) #使用reshape可以對矩陣改變它的行列
print(arr2)
print(arr2[0]) #輸出arr2的第o行
print(arr2[1][1]) #輸出第一行第一列的那個元素
print(arr2[1, 1]) #同樣可以輸出第一行第一列的那個元素
print(arr2[:, 2]) #輸出第二列的元素
print(arr2[:][2]) #輸出第二行的元素
for i in arr2: #對行進行迭代
print(i)
for j in arr2.t: #對列進行迭代 .t 是行列式的轉置的意思
print(j)
for x in arr2.flat: #對矩陣中的每一位數進行迭代
print(x)
#array的合併
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr3 = np.vstack((arr1, arr2))#注意這裡的vstack 只能包乙個元素,所以要把arr和艾爾括起來
print(arr3) #列印合併後的矩陣
print(arr3.shape) #輸出列印後的矩陣的行列
arr4 = np.hstack((arr1, arr2)) #使用hstack可以進行水平合併
print(arr4)
print(arr4.shape)
arr = np.concatenate((arr2, arr1)) #這種方法也可以對矩陣進行合併
print(arr)
arr = np.concatenate((arr2, arr1), axis=0) #合併的矩陣要形狀相同,維度相同,否則會失敗
print(arr) #當axis=0 時縱向合併,當axis=1 時橫向合併
#這裡會發生錯,提示矩陣的維數不夠
arr = np.concatenate((arr2, arr1), axis=1) #合併的矩陣要形狀相同,維度相同,否則會失敗
print(arr) #當axis=0 時縱向合併,當axis=1 時橫向合併
#第一種解決方法 使用二維及以上的矩陣
arr5 = np.array([[1, 2, 2],
[2, 3, 4]]
)arr6 = np.array([[1, 2, 4],
[3, 3, 5]]
)arr = np.concatenate((arr5, arr6), axis=1)
print(arr)
#第二種解決方法 使用 newaxis
arr1_1 = arr1[np.newaxis, :]
print(arr1_1) #列印出來其實際的值沒有發生改變,但是它的行維度會增加1. [:,np.newaxis] z這樣寫就會增加列的維度
print(arr1_1.shape)
arr2_1 = arr2[np.newaxis, :]
print(arr2_1) #列印出來其實際的值沒有發生改變,但是它的行維度會增加1
print(arr2_1.shape)
arr = np.concatenate((arr2_1, arr1_1), axis=1) #合併的矩陣要形狀相同,維度相同,否則會失敗
print(arr) #當axis=0 時縱向合併,當axis=1 時橫向合併
#第三種解決方案 使用np.atleast_2darr1_2 = np.atleast_2d(arr1)
arr1_2 = np.atleast_2d(arr1)
print(arr1_2)
print(arr1_2.shape)
print(arr1_2.t)#需要注意的是當矩陣的維度只有一維的時候,實際上 .t這個轉置不能生效
arr2_2 = np.atleast_2d(arr2)
arr = np.concatenate((arr2_2, arr1_2), axis=1)#合併的矩陣要形狀相同,維度相同,否則會失敗
print(arr)#當axis=0 時縱向合併,當axis=1 時橫向合併
#array的分割
import numpy as np
arr1 = np.arange(12).reshape(3, 4)
arr = np.arange(12).reshape(4, 3)
print(arr1)
print(arr)
arr2, arr3 = np.split(arr1, 2, axis=1) #利用split函式將arr1水平分割成兩份
print(arr2)
print(arr3)
arr4, arr5 = np.split(arr, 2, axis=0) #利用split函式將arr豎直分割成兩份
print(arr4)
print(arr5)
#注意當使用 .split 時 是均勻分割,所以對矩陣有行列對稱的要求
#解決方案:將 ,split 換位 _split 可以實現非均勻分割
arr2_1, arr3_1, arr4_1 = np.array_split(arr1, 3, axis=1) #利用split函式將arr1水平分割成三份
print(arr2_1)
print(arr3_1)
print(arr4_1)
arr4_1, arr5_1, arr6_1 = np.array_split(arr, 3, axis=0) #利用split函式將arr豎直分割成三份
print(arr4_1)
print(arr5_1)
print(arr6_1)
#以上兩種不均允的分割時都會把多的放在前面的矩陣中
#第二種分割的表示 vsplit :垂直分割 hsplit :水平分割
arr1_2, arr2_2, arr3_2 = np.vsplit(arr1, 3) #垂直分割
print(arr1_2)
print(arr2_2)
print(arr3_2)
arr1_3, arr2_3 = np.hsplit(arr1, 2) #水平分割
print(arr1_3)
print(arr2_3)
#numpy的淺拷貝和深拷貝
import numpy as np
arr1 = np.array([1, 2, 3])
arr2 = arr1
print(arr1, arr2)
arr2[0] = 2
print(arr1, arr2)#淺拷貝,會和之前的矩陣共用同樣乙個記憶體,即它們的元素值會一模一樣
arr3 = arr1.copy()#深拷貝,兩個矩陣不會占用同乙個記憶體,即元素值發生改變的時候會並不樣
arr3[1] = 4.2#會將小數自動轉化為整數儲存進矩陣中
print(arr3, arr1)
第七天學習
練習題 1 以下類定義中哪些是類屬性,哪些是例項屬性?class c num 0 def init self self.x 4 self.y 5 c.count 62 怎麼定義私有 法?3 嘗試執行以下 並解釋錯誤原因 4 按照以下要求定義乙個遊樂園門票的類,並嘗試計算2個 1個小孩平日票價。要求 ...
學習python的第七天
本節的學習是同時使用argv和raw input向使用者提示一些特別的問題。下一節學習讀寫檔案,這節練習是下一節的基礎,所以得研究清楚。下邊的練習使用raw input打出簡單的 作為提示符,提示使用者輸入。在書中說明這節學習的方式和zork或adventure兩款遊戲類似。zork 練習部分 fr...
Python學習日記 第七天
ex17 1.第一次終端中輸入的兩個檔案都沒建立,提示錯誤。原因分析 第十行使用了open命令,預設為唯讀模式,報錯提示檔案1不存在。於是建立了終端中輸入的第乙個文字,之後執行正常。這就奇怪了,為什麼沒有提示第二個文字不存在呢?不難看出,第乙個open第二個引數預設為r,而第二個open第二引數為w...