本文用來歸納P和N兩者之間的關聯,也總結一些基本的概念和用法。本文主要內容參考自一個Quick crash course。
1.Data type
相對於一般的常見語言python有幾項特殊的用法
**
表示乘方運算,比如2**3
結果應該爲8
不存在一元運算符比如
x++
或者x--
但是存在x *= 2
對於
Boolean
類型的變量一般來說,常見的邏輯運算使用and
,or
,not
代替&&
,||
,!
.
python對於String的支持非常清晰,簡單。可參見引文course的指導,不再贅述。
Comp Nump_data
python可以根據你是否加了點.
(這裏指小數點)自動處理浮點數關係。當然也可以收定的顯示指定類型,比如說
x = np.array([1,2], dtype = np.int64) #強制數據類型
2. Container
2.1 lists
lists看起來跟其他語言裏面的數組比較像,但是因爲是高級語言,不需要定義類型,不需要提前定義長度 ,而且可以隨時增加(append)和刪除(pop)元素。
另外舉一個特殊的例子
nums = list(range(5)) #numpy裏面會比較常見arange,在這裏貌似都是對的。 squares = [x ** 2 for x in nums] print(squares)
這個看起來中間的x似乎沒有定義,但是這裏直接引用也不會出現問題,因爲這些元素都在一行裏面。
lists的負數索引也很有趣,最右邊的元素被認爲是起始元素,索引爲"-1"。
Comp Numpy_array
python本身的lists可以用來初始化numpy的array,二者的元素索引方式也很相似(比如說a[1]
)。
array的shape對應於一個tuple,(因爲是用圓括號索引的)。
同樣的這裏的array也支持整數和切片(slicing)索引(注意後半部分不包括的原則)。指導書的一個例子非常典型。
import numpy as np # Create the following rank 2 array with shape (3, 4) # [[ 1 2 3 4] # [ 5 6 7 8] # [ 9 10 11 12]] a = np.array([[1,2,3,4], [5,6,7,8], [9,10,11,12]]) # Two ways of accessing the data in the middle row of the array. # Mixing integer indexing with slices yields an array of lower rank, # while using only slices yields an array of the same rank as the # original array: row_r1 = a[1, :] # Rank 1 view of the second row of a row_r2 = a[1:2, :] # Rank 2 view of the second row of a print(row_r1, row_r1.shape) # Prints "[5 6 7 8] (4,)" print(row_r2, row_r2.shape) # Prints "[[5 6 7 8]] (1, 4)" # We can make the same distinction when accessing columns of an array: col_r1 = a[:, 1] col_r2 = a[:, 1:2] print(col_r1, col_r1.shape) # Prints "[ 2 6 10] (3,)" print(col_r2, col_r2.shape) # Prints "[[ 2] # [ 6] # [10]] (3, 1)"
2.2 Dictionaries
字典是比較特殊的屬性,他總是(key, value)兩者的組合,比如
d = {'cat':'cute','dog':'furry'} #注意這裏用的是花括號
相對來說,花括號和(key,value)的特點是其最大的標誌,它不強調順序,但是這還是類似於數組的一種特徵的集合方式。
不強調順序體現在它會合並同樣的值,比如說
x={'zh':0,'zh':1,'liu':1,'yang':3} print(x) #輸出爲{'zh': 1, 'liu': 1, 'yang': 3},最初的'zh'的值被覆蓋掉了
2.3 Sets
Sets是用花括號圍起來的一組元素,不強調順序(理論上是這樣,但是你也可以用類似lists的方式索引)。相當於沒有value的字典。
同樣的不強調順序體現在他會自動合併重複的值,比如
from math import sqrt nums = {int(sqrt(x)) for x in range(30)} print(nums) #會打印出{0,1,2,3,4,5},而不是由對應的30個字符
2.4 Tuples
tuple字面上可以翻譯成“數組,元組”,在指導手冊(見引文)當中tuple的修飾詞是immutable(不可更改的),這表明了對應的有限的操縱函數。跟lists似乎有點像,但是標號不同。它使用圓括號,而且元素跟字典和sets型對應緊密。
t = (5,6) #創建了一個tuple,它是由兩個構成的一個整體;
3 Math
以上來說python本身更像是主角,但在這裏numpy佔了大頭。
numpy本身的運算大部分都是基於矩陣運算的。但是採用elementwise的場景也非常常見。這一點跟MATLAB不同,numpy直接的*
,/
都是完成的elementwise的操作,而使用.dot
來運算真正的矩陣乘法。
矩陣的轉置是另一個常見的運算,.T
直接就能完成轉置的操作,但是注意對於一維的向量,不管你怎麼轉置在這裏都是不變的。你看shape的話,出現的tuple的元素位置也不會改變。
# Note that taking the transpose of a rank 1 array does nothing: v = np.array([1,2,3]) print(v) # Prints "[1 2 3]" print(v.T) # Prints "[1 2 3]"