python和Keras.backend常見函式

ilufei2019發表於2018-05-18

python 常見函式(v3.0)

lambda 匿名函式

# lambda <params>:<result>
func = lambda x, y: x + y
print(func(1, 2))
# 輸出 3

map 函式

將 一個或多個 sequnce 中元素作為引數傳遞到 func 中執行,並以迭代器的方式將函式執行結果返回。

# map(func, sequnce[, sequnce,....]) -> iterator
>> list(map(lambda x: x+2, [1,2,3]))
[3, 4, 5]
>> list(map(pow, [1,2,3], [2,3,4]))
[1, 8, 81]

filter 函式

過濾器, 若function為None,則會返回包含非空元素的迭代器。

# filter(func or None, sequence) -> iterator
>> list(filter((lambda x: x>0),range(-5,5)))
[1,2,3,4]
>> list(filter(None,range(-5,5)))
[-5, -4, -3, -2, -1, 1, 2, 3, 4]

map 函式

對sequnce中元素依次執行 func, 並返回一個map物件

# map(func, sequence)
>> map(lambda x: x*x*x, range(1, 11)
<map object at 0x7fafdf0d6978>
>> list(map(lambda x: x*x*x, range(1, 11))
[1, 8, 27, 64, 125, 216, 343, 512, 729, 1000]

當 func 引數為多個引數時, sequence 數量與之對應

reduce 函式

迭代 sequence 中內容逐一呼叫相應函式, 返回一個結果

# reduce(func, sequence, starting_value)
# starting_value 為初始呼叫值, 可為空或省略
>> reduce(lambda x, y: x + y, range(1, 11))
55

在 python 3 之後如果想用 reduce 可以採用 functools, 因為其已經被移除 python 3 內建的功能, 方法如下:

import functools
functools.reduce(lambda x, y: x + y, range(1, 11))

zip 函式

接收 sequence 物件作為引數, 將物件中對應的元素打包成為一個個 tuple, 然後返回由這些 tuples 組成的 list. 若傳入引數的長度不等, 則返回 list 的長度和引數中長度最短的物件相同. 使用 * 操作符與 zip 函式配合可以實現與 zip 相反的功能,即將合併的序列拆成多個 tuple.

# zip([sequence, ...])
>> x = [1, 2, 3]; y = [`a`, `b`, `c`]
>> list(zip(x, y))
[(1,`a`),(2,`b`),(3,`c`)]
>> list(zip(*zip(x, y)))
[(1,2,3),(`a`,`b`,`c`)]
# 長度不一樣
>> x = [1, 2, 3]; y = [`a`, `b`, `c`, `d`]
>> list(zip(x, y))
[(1,`a`),(2,`b`),(3,`c`)]
>> list(zip(*zip(x, y)))
[(1,2,3),(`a`,`b`,`c`)]

keras 樣本打散

# data_x 是 numpy.array 物件
indices = numpy.random.permutation(data_x.shape[0]) # shape[0]表示第0軸的長度,通常是訓練資料的數量
rand_data_x = data_x[indices]
rand_data_y = data_y[indices] # data_y就是標記(label)


相關文章