滑動窗口函數(shù),之前不知道 ,還自己寫了個,,
創(chuàng)新互聯(lián)公司是一家專業(yè)提供銅山企業(yè)網(wǎng)站建設,專注與成都網(wǎng)站建設、成都網(wǎng)站設計、H5頁面制作、小程序制作等業(yè)務。10年已為銅山眾多企業(yè)、政府機構(gòu)等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡公司優(yōu)惠進行中。
df.rolling().sum()
df.rolling().var()
參考下面的代碼.
play 可能有問題,主要是沒說清楚在保留牌的時候, 輸入Ace 或者 "Ace Ace" 有什么區(qū)別,到底是輸入一次 Ace 保留手上所有的 Ace 還是只保留一個,這個沒說清楚??蠢樱@兩種用法都有,我按照輸入了幾個就保留幾個來做的。
simulate 沒問題,和圖片中的結(jié)果完全一樣
必須用 python 3
import?random
import?collections
_dice_type?=?['Ace',?'King',?'Queen',?'Jack',?'10',?'9']
_hand_mapping?=?collections.OrderedDict([
('5kind',????'Five?of?a?kind'),
('4kind',????'Four?of?a?kind'),
('full',?????'Full?house'),
('straight',?'Straight'),
('3kind',????'Three?of?a?kind'),
('2pair',????'Two?pair'),
('1pair',????'One?pair'),
('bust',?????'Bust'),
])
def?_check_hand(dices):
counter?=?collections.Counter(dices)
if?len(counter)?==?1:
return?'5kind'
sorted5?=?counter.most_common(5)
if?sorted5[0][1]?==?4:
return?'4kind'
if?sorted5[0][1]?==?3:
if?sorted5[1][1]?==?2:
return?'full'
else:
return?'3kind'
if?sorted5[0][1]?==?2:
if?sorted5[1][1]?==?2:
return?'2pair'
else:
return?'1pair'
if?len(counter)?==?5:
dtype?=?sorted5[0][0]
for?x?in?sorted5:
if?dtype?!=?x[0]:
break
dtype?+=?1
else:
return?'straight'
return?'bust'
def?play():
dices?=?[]
retry?=?0
while?True:
remain?=?5?-?len(dices)
if?remain?=?0:
break
dices.extend([random.randint(0,5)?for?x?in?range(remain)])
print("The?roll?is:?{}".format(
"?".join([_dice_type[d]?for?d?in?sorted(dices)])
))
print("It?is?a?{}".format(_hand_mapping[_check_hand(dices)]))
if?retry??1:
break
prompt?=?"Which?dice?do?you?want?to?keep?for?the?{}?roll??".format(
"second"?if?retry?==?0?else?"third"
)
while?True:
answer?=?input(prompt).lower()
if?answer?==?'all':
break
answer?=?[x.capitalize()?for?x?in?answer.split()]
if?set(answer).issubset(set(_dice_type)):
break
print("That?is?not?possible,?try?again!")
retry?+=?1
if?answer?==?'all':
print("Ok,?done")
break
tmp?=?dices
dices?=?[]
for?x?in?tmp:
if?_dice_type[x]?in?answer:
dices.append(x)
answer.remove(_dice_type[x])
def?simulate(n,?debug=False):
result?=?dict.fromkeys(_hand_mapping.keys(),?0)
for?_?in?range(n):
dices?=?[random.randint(0,5)?for?x?in?range(5)]
if?debug:
print("DEBUG:",?"?".join([_dice_type[d]?for?d?in?sorted(dices)]))
result[_check_hand(dices)]?+=?1
for?k,?v?in?_hand_mapping.items():
cnt?=?result[k]
print("{:16s}:?{:.2f}%".format(v,?100*cnt/n))
這幾個函數(shù)在 Python 里面被稱為高階函數(shù),本文主要學習它們的用法。
filter 函數(shù)原型如下:
第一個參數(shù)是判斷函數(shù)(返回結(jié)果需要是 True 或者 False),第二個為序列,該函數(shù)將對 iterable 序列依次執(zhí)行 function(item) 操作,返回結(jié)果是過濾之后結(jié)果組成的序列。
簡單記憶:對序列中的元素進行篩選,獲取符合條件的序列。
返回結(jié)果為: ,使用 list 函數(shù)可以輸入序列內(nèi)容。
map 函數(shù)原型如下:
該函數(shù)運行之后生成一個 list,第一個參數(shù)是函數(shù)、第二個參數(shù)是一個或多個序列;
下述代碼是一個簡單的測試案例:
上述代碼運行完畢,得到的結(jié)果是: 。使用 print(list(my_new_list)) 可以得到結(jié)果。
map 函數(shù)的第一個參數(shù),可以有多個參數(shù),當這種情況出現(xiàn)后,后面的第二個參數(shù)需要是多個序列。
map 函數(shù)解決的問題:
reduce 函數(shù)原型如下:
第一個參數(shù)是函數(shù),第二個參數(shù)是序列,返回計算結(jié)果之后的值。該函數(shù)價值在于滾動計算應用于列表中的連續(xù)值。
測試代碼如下:
最終的結(jié)果是 6,如果設置第三個參數(shù)為 4,可以運行代碼查看結(jié)果,最后得到的結(jié)論是,第三個參數(shù)表示初始值,即累加操作初始的數(shù)值。
簡單記憶:對序列內(nèi)所有元素進行累計操作。
zip 函數(shù)原型如下:
zip 函數(shù)將可迭代的對象作為參數(shù),將對象中對應的元素打包成一個個元組,然后返回由這些元組組成的列表。
如果各個迭代器的元素個數(shù)不一樣,則返回列表長度與最短的對象相同,利用星號( * )操作符,可以將元組解壓為列表。
測試代碼如下:
展示如何利用 * 操作符:
輸出結(jié)果如下:
簡單記憶:zip 的功能是映射多個容器的相似索引,可以方便用于來構(gòu)造字典。
enumerate 函數(shù)原型如下:
參數(shù)說明:
該函數(shù)用于將一個可遍歷的數(shù)據(jù)對象組合為一個索引序列,同時列出數(shù)據(jù)和數(shù)據(jù)下標,一般用在 for 循環(huán)當中。
測試代碼如下:
返回結(jié)果為: 。
本文涉及的函數(shù)可以與 lambda 表達式進行結(jié)合,能大幅度提高編碼效率。最好的學習資料永遠是官方手冊
將Scrollbar的事件處理定義到一個函數(shù)中,在函數(shù)中對各Listbox的相關(guān)屬性進行相應設置
這一部分涉及到了常用的操作,比如調(diào)換維度的位置,給數(shù)據(jù)重新reshape換形等等,建議大家可以認真閱讀這部分。
老樣子,先新建一個數(shù)組
比如說在求某個東西時需要將時間維放在最后一維,但是數(shù)據(jù)本身的時間在第一維,那么便可以用到這個操作。
第一種是精準換位,指定每個維度的位置
第二種是單獨換位,只對指定維度換位,將time放在最后,其余不變
第三種為全部換位,相當于數(shù)組轉(zhuǎn)置
擴展指增加一個維度,壓縮指將一個維度擠壓掉
官方文檔中接下來有一段是關(guān)于DataArray向DataSet轉(zhuǎn)換的,個人感覺放在這一章節(jié)并不合理,我后邊會整理放進Python氣象數(shù)據(jù)處理進階之Xarray(1)中(我覺得兩種基礎數(shù)據(jù)結(jié)構(gòu)以及互相轉(zhuǎn)換應該最開始介紹的)。所以接下來跳過這部分。
個人感覺可能處理站點數(shù)據(jù)會用到這個方法
換一個數(shù)組演示
現(xiàn)在將這個2維數(shù)組堆疊成1維
也可以拆分,其實就是反堆疊
最重要的是不同于Pandas,Xarray的stack不缺自動丟失缺測值?。?!
Xarray還提供了將不同變量stack的例子,有興趣的可以去看看。這個用法感覺比較雞肋
這塊比較難理解,建議還是先讀第一篇文章,弄清數(shù)據(jù)結(jié)構(gòu),da數(shù)組顯示Dimensions without coordinates: x,而通過da.set_index函數(shù),將X設置為混合索引號。
之后便可以實線自由索引:
通過mda.reset_index('x')重置。
reorder_levels()函數(shù)允許調(diào)換索引順序(個人感覺比較雞肋)
這小節(jié)應該是這篇文章和數(shù)組換形換維同等重要的。
這就是對數(shù)組進行滾動。這個的作用主要在于做差分計算。雖然前邊講過Xarray提供了中央差計算函數(shù),但是仍需要更靈活的操作,滾動函數(shù)就實現(xiàn)了這個目的。