Python Fundamentals

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

  1. 检查矩阵是几乘以几,使用 m.shape
  2. 可以用 arrange 函数直接生成 array,比如 n = np.arange(0, 30, 2) # start at 0 count up by 2, stop before 30
  3. 接着 reshape 可以把 array 里的一行的数重新分布,例如 n = n.reshape(3, 5) # reshape array to be 3x5reshape 函数改变调用数组的形状并返回该数组,而 resize 函数改变调用数组自身。反操作 ravel 直接把 array 摊平。
  4. 2中,如果不知道步长,只知道元素的个数,可以用 linspace 函数,例如 o = np.linspace(0, 4, 9) # return 9 evenly spaced values from 0 to 4
  5. 在创建 array 时可以直接用 dtype 指定数据的类型,例如复数 c = np.array( [ [1, 2], [3, 4] ] ), complex),就会输出array( [ [1.+0.j, 2.+0.j], [3.+0.j, 4.+0.j ] ] )
  6. 用函数 zeros 可创建一个全是 0 的 array,用函数 ones 可创建一个全为1的 array,函数 empty 创建一个内容随机并且依赖与内存状态的 array,函数 eye 可创建一个单位矩阵,函数 diag(A) 可利用已有的 array 创建对角矩阵。默认创建的 array 类型(dtype) 都是 float64。
  7. 普通运算操作符对 array 里的元素是逐个处理的,包括乘法和乘方,矩阵乘法要用函数 .dot(A, B)
  8. 组合两个 array,水平组合函数 hstack( [A, B]),等同于 concatenate( [A, B], axis=1);垂直组合函数 vstack( [A, B] ),等同于 concatenate( [A, B], axis=0);深度组合函数 dstack( [A, B] ),在第三个轴上进行组合。同理反操作,也有分割函数 hsplitvsplitdsplitsplit,最后一个也是要有 axis=1 或者 axis = 0。
  9. 重复的区别: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])
  10. a.argmax()a.argmin() 返回 array 中最大和最小值的 index。
  11. 产生随机 array 代码例子:test = np.random.randint(0, 10, (4,3))
  12. 遍历方法。通过 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):
  13. 如下代码块反映了不复制、浅复制 (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]]) 
    
  1. 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]])

你可能感兴趣的:(Python Fundamentals)