Showing posts with label programs. Show all posts
Showing posts with label programs. Show all posts

Monday, February 18, 2019

亂數分組參考程式

"程式"中的"程"表示流程, 而"式"則指採用特定格式, 因此"程式"可以解釋為利用特定格式的語法來表達特定流程.

至於電腦程式 (或計算機程式), 則特指該流程是利用電腦執行, 而所謂的特定格式則指採用特定的計算機語言, 與本網誌相關的課程, 主要採用 Python, 其次還使用 Javascript, C/C++ 與 Lua 等程式語言.

學習計算機程式, 特定語言的語法與解題流程互為因果, 因此在過程中, 除了必須了解各程式語言的基本範式及語法外, 還需要針對解題流程中所使用的資料結構與演算法進行取捨, 對於中型以上程式, 還需選擇採用何種資料庫系統.

希望利用 Python 對各班學員亂數分組, 必須先了解如何讀進 (with 與 open 及 read) 各班的學員檔案, 設法將各學員的學號轉進數列 (包含利用 splitlines() , 然後導入 random, 並且了解 random.shuffle() 的用法.

接著在編寫學員亂數分組程式時, 則可按照下列流程配置上述各程式元件:

  1. 讀進學員資料, 設法將各學員學號轉入數列
  2. 利用亂數模組中的 shuffle 函式, 隨機弄亂學員學號數列
  3. 利用重複迴圈, 從學員學號數列中一一取出, 準備進行分組
  4. 在迴圈中利用整數相除後取得餘數的規律, 依照每組幾人的規劃進行分組
  5. 在分組過程, 再設法利用數列的 append, 將各組學員學號納為分組數列
  6. 最後將各組數列再放入選課班級數列中備用

本學期各班配合協同執行課程實習任務, 進行學員亂數分組, 以下為參考程式:

import random
filename = 'cdaw1_student_list.txt'
# 每組人數
num_in_one_group = 8
# 組序由 1 開始
group = 1
# 各班分組後所得數列
c2019 = []
with open(filename) as f:
    # 讀進全部檔案, 轉進數列, 並同時將各行的 \n 去除
    read_data = f.read().splitlines() 
print("共有 " + str(len(read_data)) + " 位學員")
# 利用 shuffle 將數列隨機弄亂
random.shuffle(read_data)
for i in range(len(read_data)):
    # 利用整數相除的餘數進行分組
    if i%num_in_one_group == 0:
        # 列出分隔符號
        print("-"*20)
        print("group " + str(group) +":")
        # 在分組區隔時重置各組學員數列
        group_list = []
        print()
        # 同時列出與分隔標註對應 i 的數列內容
        print(read_data[i])
        group_list.append(read_data[i])
        group = group + 1
    else:
        # 逐一列出同組的其他學員
        print(read_data[i])
        group_list.append(read_data[i])
    if i%num_in_one_group == 0:
        c2019.append(group_list)
# c2019 為該班分組後所得分組數列
print(c2019)

註: 第一週 cda 學員資料: cdaw1_student_list.txt

另外, 本學期除學員自評外, 加入各組學員互評機制, 請各組實際根據課程評量表單取回之資料, 以程式進行處理, 並提出此一評量機制可能帶來的問題與因應方案.

已知問題

利用 mde At nfu At edu At tw  G suite 建立自評與互評表單, 目前無法讓 gm At nfu At edu At tw 的用戶登入填表, 第一種解決方法為, 設法配合課程, 在 gm At nfu At edu At tw 網域帳號中重新建立表格, 第二種解決方案則是, 為每一學員建立 mde At nfu At edu At tw 網域下的臨時課程帳號 (課程結束後刪除).

Tuesday, February 12, 2019

Simple Neural Network in Python

透過下列連結, 可以執行簡單的 Python 類神經網路程式:

https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1

from numpy import exp, array, random, dot
training_set_inputs = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])
training_set_outputs = array([[0, 1, 1, 0]]).T
random.seed(1)
synaptic_weights = 2 * random.random((3, 1)) - 1
for iteration in range(1000):
    output = 1 / (1 + exp(-(dot(training_set_inputs, synaptic_weights))))
    synaptic_weights += dot(training_set_inputs.T, (training_set_outputs - output) * output * (1 - output))
print (1 / (1 + exp(-(dot(array([1, 0, 0]), synaptic_weights)))))
而此篇的另外一個重點為: 如何在 Google Blogger 中納入程式碼高亮顯示, 並且列出程式行號. 黨使用者登入 Google Blogger 後, View Blog 之右上方將會出現 Design 連結, 網誌管理者點選後, 可以進入 Theme, 並且選擇 Edit HTML, 將下列 Javascript 放在 head 標註中.

<script src='http://mde.tw/wcm2019/static/syntaxhighlighter/shCore.js' type='text/javascript'/>
<script src='http://mde.tw/wcm2019/static/syntaxhighlighter/shBrushCpp.js' type='text/javascript'/>
<script src='http://mde.tw/wcm2019/static/syntaxhighlighter/shBrushCSharp.js' type='text/javascript'/>
<script src='http://mde.tw/wcm2019/static/syntaxhighlighter/shBrushCss.js' type='text/javascript'/>
<script src='http://mde.tw/wcm2019/static/syntaxhighlighter/shBrushDelphi.js' type='text/javascript'/>
<script src='http://mde.tw/wcm2019/static/syntaxhighlighter/shBrushJava.js' type='text/javascript'/>
<script src='http://mde.tw/wcm2019/static/syntaxhighlighter/shBrushJScript.js' type='text/javascript'/>
<script src='http://mde.tw/wcm2019/static/syntaxhighlighter/shBrushPhp.js' type='text/javascript'/>
<script src='http://mde.tw/wcm2019/static/syntaxhighlighter/shBrushPython.js' type='text/javascript'/>
<script src='http://mde.tw/wcm2019/static/syntaxhighlighter/shBrushRuby.js' type='text/javascript'/>
<script src='http://mde.tw/wcm2019/static/syntaxhighlighter/shBrushSql.js' type='text/javascript'/>
<script src='http://mde.tw/wcm2019/static/syntaxhighlighter/shBrushVb.js' type='text/javascript'/>
<script src='http://mde.tw/wcm2019/static/syntaxhighlighter/shBrushXml.js' type='text/javascript'/>
<link href='http://mde.tw/wcm2019/static/syntaxhighlighter/css/shCoreDefault.css' rel='stylesheet' type='text/css'/>
<script type='text/javascript'>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
</script>

之後就可以透過 http://alexgorbatchev.com/SyntaxHighlighter/ 中的說明, 以 <pre class="brush: py"></pre> 或 <pre class="brush: js"></pre> 顯示對應的程式碼.

NX12

NX 12 Help https://docs.plm.automation.siemens.com/tdoc/nx/12/nx_help Python related https://docs.plm.automation.siemens.com/tdoc/nx/...