Functions
add_numbers updated to take an optional 3rd parameter. Using print allows printing of multiple expressions within a single cell.
def add_numbers(x,y,z=None):
if (z==None):
return x+y
else:
return x+y+z
print(add_numbers(1, 2))
print(add_numbers(1, 2, 3))
output:
3
6
add_numbers updated to take an optional flag parameter.
def add_numbers(x, y, z=None, flag=False):
if (flag):
print('Flag is true!')
if (z==None):
return x + y
else:
return x + y + z
print(add_numbers(1, 2, flag=True))
output:
Flag is true!
3
Reading and Writing CSV files
To show CVS files in console, use command !cat xxx.csv
.
use “with” to open files
import csv
%precision 2
with open('mpg.csv') as csvfile:
mpg = list(csv.DictReader(csvfile))
mpg[:3] # The first three dictionaries in our list.
用了 with,就不需要 file.close(),会自动关闭以及处理异常,相当于 finally 的功能。
The Python Programming Language: Dates and Times
import datetime as dt
import time as tm
tm.time()
dtnow = dt.datetime.fromtimestamp(tm.time())
dtnow
dtnow.year, dtnow.month, dtnow.day, dtnow.hour, dtnow.minute, dtnow.second # get year, month, day, etc.from a datetime
delta = dt.timedelta(days = 100) # create a timedelta of 100 days
delta
today = dt.date.today()
today - delta # the date 100 days ago
today > today-delta # compare dates
Map()
Here's an example of mapping the min function between two lists.
store1 = [10.00, 11.00, 12.34, 2.34]
store2 = [9.00, 11.10, 12.34, 2.01]
cheapest = map(min, store1, store2)
cheapest
the cheapest 不会输出具体的值,只会输出一个地址,除非你进去:
for item in cheapest:
print(item)
output:
9.0
11.0
12.34
2.01
Lambda and List Comprehensions
Here's an example of lambda that takes in three parameters and adds the first two.
my_function = lambda a, b, c : a + b
my_function(a, b, c)
And list comprehension.
如果没有 else, 就是 a for i in items if C
;如果加上 else,就需要调换顺序: a if C else b for i in items
The Python Programming Language: Numerical Python
- 检查矩阵是几乘以几,使用
m.shape
。 - 可以用
arrange
函数直接生成 array,比如n = np.arange(0, 30, 2) # start at 0 count up by 2, stop before 30
。 - 接着
reshape
可以把 array 里的一行的数重新分布,例如n = n.reshape(3, 5) # reshape array to be 3x5
。reshape
函数改变调用数组的形状并返回该数组,而resize
函数改变调用数组自身。反操作ravel
直接把 array 摊平。 - 在2中,如果不知道步长,只知道元素的个数,可以用
linspace
函数,例如o = np.linspace(0, 4, 9) # return 9 evenly spaced values from 0 to 4
。 - 在创建 array 时可以直接用 dtype 指定数据的类型,例如复数
c = np.array( [ [1, 2], [3, 4] ] ), complex)
,就会输出array( [ [1.+0.j, 2.+0.j], [3.+0.j, 4.+0.j ] ] )
- 用函数
zeros
可创建一个全是 0 的 array,用函数ones
可创建一个全为1的 array,函数empty
创建一个内容随机并且依赖与内存状态的 array,函数eye
可创建一个单位矩阵,函数diag(A)
可利用已有的 array 创建对角矩阵。默认创建的 array 类型(dtype) 都是 float64。 - 普通运算操作符对 array 里的元素是逐个处理的,包括乘法和乘方,矩阵乘法要用函数
.dot(A, B)
。 - 组合两个 array,水平组合函数
hstack( [A, B])
,等同于concatenate( [A, B], axis=1)
;垂直组合函数vstack( [A, B] )
,等同于concatenate( [A, B], axis=0)
;深度组合函数dstack( [A, B] )
,在第三个轴上进行组合。同理反操作,也有分割函数hsplit
、vsplit
、dsplit
和split
,最后一个也是要有 axis=1 或者 axis = 0。 - 重复的区别:
np.array([1, 2, 3] * 3)
返回array([1, 2, 3, 1, 2, 3, 1, 2, 3])
;而np.repeat([1, 2, 3], 3)
返回array([1, 1, 1, 2, 2, 2, 3, 3, 3])
。 -
a.argmax()
和a.argmin()
返回 array 中最大和最小值的 index。 - 产生随机 array 代码例子:
test = np.random.randint(0, 10, (4,3))
。 - 遍历方法。通过 row:
for row in test:
;通过 index:for i in range(len(test)):
;通过 row 和 index:for i, row in enumerate(test):
;通过 zip 函数遍历多个:for i, j in zip(test, test2):
。 - 如下代码块反映了不复制、浅复制 (view) 和复制 (copy):
-
不复制:
>>> a = arange(12) >>> b = a #不创建新对象 >>> b is a # a和b是同一个数组对象的两个名字 True >>> b.shape = 3,4 #也改变了a的形状 >>> a.shape (3, 4)
-
浅复制 (view):
>>> c = a.view() >>> c is a False >>> c.base is a #c是a持有数据的镜像 True >>> c.flags.owndata False >>> >>> c.shape = 2,6 # a的形状没变 >>> a.shape (3, 4) >>> c[0,4] = 1234 #a的数据改变了 >>> a array([[ 0, 1, 2, 3], [1234, 5, 6, 7], [ 8, 9, 10, 11]])
切片数组返回它的一个 view:
>>> s = a[ : , 1:3] # 获得每一行1,2处的元素
>>> s[:] = 10 # s[:] 是s的镜像。注意区别s=10 and s[:]=10
>>> a
array([[ 0, 10, 10, 3],
[1234, 10, 10, 7],
[ 8, 10, 10, 11]])
-
深复制 (copy)
>>> d = a.copy() #创建了一个含有新数据的新数组对象 >>> d is a False >>> d.base is a #d和a现在没有任何关系 False >>> d[0,0] = 9999 >>> a array([[ 0, 10, 10, 3], [1234, 10, 10, 7], [ 8, 10, 10, 11]])
-
We can perform conditional indexing. Here we are selecting values from the array that are greater than 30. (Also see np.where)
>>> r = np.array ([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23], [24, 25, 26, 27, 28, 29], [30, 31, 32, 33, 34, 35]]) >>> r[r > 30] array([31, 32, 33, 34, 35]) >>> r[r > 30] = 30 array([[ 0, 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10, 11], [12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23], [24, 25, 26, 27, 28, 29], [30, 30, 30, 30, 30, 30]])