本文用来归纳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]"