python入門第七課
阿新 • • 發佈:2018-11-25
有人會問為啥沒有第五、六課呢?
我不會告訴你我沒聽懂的。
書歸正傳,繼續第七課的練習。
練習一:簡單加法
在 Python 下對一個二維列表,l1=[[1,2,3],[4,5,6]],然後進行每個元素+1 的操作。
要求使用
Python 迴圈
Map 函式
Numpy 計算(廣播演算法)
方法一;
l1=[[1,2,3],[4,5,6]]
for i in range(len(l1)):
for j in range(len(l1[i])):
l1[i][j]+=1
print(l1)
方法二:
l1=[[1,2,3],[4,5,6]]
def foo(x):
for i in range(len(x)):
x[i] += 1
return x
print list(map(foo,l1))
方法三;
import numpy as np
l1=[[1,2,3],[4,5,6]]
arr = np.array(l1)+1
print arr
輸出結果:
練習二:對 arr= [[1, 2, 3], [4, 5, 6], [7,8, 9], [10, 11, 12]]進行行列互轉
Python 列表表示式
Numpy 進行轉置
arr= [[1, 2, 3], [4, 5, 6], [7,8, 9], [10, 11, 12]]
x= [[row[i] for row in arr] for i in range(len(arr[0]))]
print x
import numpy as np
arr= [[1, 2, 3], [4, 5, 6], [7,8, 9], [10, 11, 12]]
print np.transpose(arr)
輸出結果:
這個列表推導式邏輯不太好理解,他是同時執行兩個函式
練習三:矩陣內部運算
在 Python 下對一個二維列表,l1=[[1,2,3],[4,5,6]],要求求出按行與按列求和。
在 numpy 下對一個二維列表,l1=[[1,2,3],[4,5,6]],要求求出按行與按列求和。
l1= [[1, 2, 3], [4, 5, 6]]
sum_r=[sum(x) for x in l1]
s = []
total = 0
for column in range(len(l1[0])):
# print("column = ",column)
for i in range(len(l1)):
total += l1[i][column]
s.append(total)
print sum_r,s
輸出結果:
對行求和用了列表表示式,邏輯還比較清楚,對列求和比較麻煩,最後終於弄清楚了使用了l1[i][j]的切片,也算是笨辦法,有更好的希望一起交流。
還是numpy簡單,一個函式就搞定了
import numpy as np
l1= [[1, 2, 3], [4, 5, 6]]
l2=np.array(l1)
print l2.sum(axis=0)
print l2.sum(axis=1)
輸出結果:
感覺numpy好好用啊!
練習四:NDArray 建立與屬性
使用 Numpy 建立一個多維陣列,請輸出以下屬性
該陣列的形狀
該陣列的維度
該陣列元素的個數
該陣列的資料型別
import numpy as np
arr = np.arange(12).reshape(3,4)
print arr
print arr.shape
print arr.ndim
print arr.size
print arr.dtype
輸出結果:
練習五:NDArray 的訪問
建立一個包含從數字 1 到 60,的陣列,並將於其形狀變為為(3,2,10)的三維陣列,並按如下要求訪問這個三維陣列
import numpy as np
arr = np.arange(1,61).reshape(3,2,10)
print '原始陣列',arr
print '-'*50
print arr[:,[1],:]
print '-'*50
print arr[[0],[0],:]
print '-'*50
print arr[:,:,[6,7]]
print '-'*50
arr1=np.reshape(arr,[10,-1])
print arr1
print '-'*50
print np.random.shuffle(arr1)
print '-'*50
print np.sort(arr1,axis=1)
print np.sort(arr1,axis=0)
print np.transpose(arr1)
print np.transpose(arr1).flatten()
輸出結果:
注意:
np.random.shuffle(arr1)
print arr1
shuffle函式對陣列做處理,所以需要輸出後,直接列印才可以