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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值