2018年3月25日 星期日

Python: list comprehensive (Dictionary Comprehensive)

Python的list comprehensive是python語言中最強大的特色之一,可以讓你使用很簡單的句子就完成list的創建,python list comprehensive的通式如下:
[ __ for __ in ____ ]

舉例來說:

>>>list1 = [num for num in range(0,6)]
就可以創建出 [0, 1, 2, 3, 4]的list

後面還可以加入更複雜的條件式,如:

>>>list2 = [num for num in range(0,10) if num%2 == 0]
就可以創建出 [0, 2, 4, 6, 8]的list

當然還有不少有趣的例子,附在下方:
要注意的是其中最後一個例子運用在string上。


最後,python也允許有複雜的巢式(nested)的函式呼叫,例如:



2018/3/28 補充

此外,Dictionary Comprehensive與List Comprehensive非常類似,通式如下:
{ __:__ for __ in ____ }

例如:
第一個例子中,因預設(default)就是iterate鍵值(key),所以只看到keys。
而在第二個例子中,key及value都用到了,所以要注意最後in的後面必須改成.items,表示要iterate的整個item。

更多創建出dictionary的例子:






Python: Interesting Python codes (== and is)

最近發現兩個跟python相關且有趣的code:

第一個:

首先看下方的程式好像很正常:

但是如果變數a與b的值大一點:

ㄟ.......怎會這樣?
找答案前先來看一下id()這個指令:
執行後會回傳變數的記憶體位置。
所以我們看一下a, b記憶體的位置:



所以我們可以看到a與b的值是一樣的,所以a == b當然是對(True)的,但"a is b"必須考量記憶體的位置必須相同,所以當然就是錯(False)的囉。這感覺有點類似於C裡面的指標。
或者是說,只要 == 兩邊的值是一樣的,a == b就是True,但a與b是不同物件,所以如果使用"is",必須是同個物件才是True,否則就是False。

同樣的,我們可以類推類似的結果於list上:

不過還有一個問題沒解決,就是為什麼數字小的"is"跟"=="的結果就是一樣的?
這是因為python為了效率,將-5至256的integer置於cache(快取),所以這些int是指向同一個記憶體位置的,例如下方的例子:


所以既然記憶體位置都一樣,"a is b"當然也是True,不過記得如上述的例子,只要值小於256,更精確的說是-5到256的值是比較特殊的,結果就不同囉!!!我想這邊真的要小心,否則寫出程式很容易有bug。

第二個:

>>> a = range(2,6)
>>> print(a)

會輸出哪個結果?
是 2,3,4,5 還是 range(2,6)??

答案是:
range(2,6)

因為range()必須透過iteration執行,但print()只執行一次,所以當然結果就是range()本身的指令了。


2018年3月18日 星期日

Microsoft Visual Studio 2017 編寫C語言

我們都知道Microsoft Visual Studio是個很好用(其實應該說很強大,但這個詞太常用了)的IDE,能編寫許多程式語言,也有不少的擴充功能,是提升軟體生產力的好工具,現在已有2017的版本,個人用的版本更是免費的!!!
有需要的可以在這Visual Studio下載
不過雖然Visual Studio 2017適用於編寫C/C++語言,但其中C語言的編譯過程卻較不那麼直觀,我們接下來看看怎麼使用Visual Studio 2017編寫C吧。

首先於Visual Studio 2017建立新專案(紅框內):

接下來選擇Visual C++,最重要的是接下來一定要選擇空白專案,不然之後就改不了了:

之後利用滑鼠右鍵點選來源檔案加入新增項目:

接著可以看到開啟的檔案Source.cpp,.cpp是C++的副檔名:

把.cpp改成.c,另外簡單寫個Hello甚麼的C程式:

執行成功!!!


2018年3月11日 星期日

Tensorflow (Tensorboard)

Tensorboard的使用方式如下:

在jupyter notebook中先運用tensorflow建構一個簡單的tensorflow模型:

之後輸入以下程式碼:
tf.summary.merge_all()
train_writer = tf.summary.FileWrite('你要存的檔案目錄', sess.graph)
就會將所有的tensorflow的資料打包,並存檔。



怎麼打開tensorboard呢?
要先離開jupyter notebook回到cmd,在Tensorflow的Anaconda的虛擬環境之中執行下列命令:

>activate tensorflow

接下來啟動Tensorboard:

>tensorboard --logdir=c:\你剛存檔的目錄

得到如下的畫面:
可以看到紅色框框中有個網址:
這是個人筆電的內部ip
打開慣用瀏覽器,輸入此網址就可以看到tensorboard了



參考資料
TensorFlow+Keras深度學習人工智慧實務應用