1. 程式人生 > >python入門第七課

python入門第七課

 

有人會問為啥沒有第五、六課呢?

我不會告訴你我沒聽懂的。

書歸正傳,繼續第七課的練習。

練習一:簡單加法

在 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函式對陣列做處理,所以需要輸出後,直接列印才可以