Ready for Python&Numpy

本文用來歸納P和N兩者之間的關聯,也總結一些基本的概念和用法。本文主要內容參考自一個Quick crash course

1.Data type

相對於一般的常見語言python有幾項特殊的用法

  • ** 表示乘方運算,比如2**3 結果應該爲8

  • 不存在一元運算符比如x++ 或者x-- 但是存在x *= 2

  • 對於Boolean 類型的變量一般來說,常見的邏輯運算使用andornot 代替 &&||! .

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]"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章