學習python第七天

2021-10-02 23:41:26 字數 4302 閱讀 1956

#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...