2015年9月10日 星期四

[numpy]矩陣操作

我差點把自己搞瘋。關於 dot、inner、outer、cross、* 跟我印象中的不一樣。難怪當初快被當掉…。

反正現在一切以 numpy 說了算…。

首先,平移矩陣的函式先寫出來,方便以後要用。(公式也是抄來的,所謂的齊次座標 homogeneous coordinate) http://openhome.cc/Gossip/ComputerGraphics/HomogeneousCoordinate.htm

def m_shift(vector):
    a = numpy.array([1,0,0,vector[0],
                     0,1,0,vector[1],
                     0,0,1,vector[2],
                     0,0,0,1])
    a.shape = (4,4)
    m = numpy.mat(a.copy())
    return a

 

輸入一個 array 當向量,三個數字依序表示對 x, y, z 做平移的量。

假設就每個軸平移 2 好了,m = m_shift(numpy.array([2,2,2]))

原來的點就假設為 (1,2,3),要給公式用,就取一個 array,v1 = v1 = numpy.array([1,2,3,1])。最後那個 1 是為了齊次座標而補的。

執行 dot 及 * 的結果如下:

m = [[1 0 0 2]
[0 1 0 2]
[0 0 1 2]
[0 0 0 1]]

v1 = [[1]
[2]
[3]
[1]]

numpy.dot(m,v1) = [[3]
[4]
[5]
[1]]

m * v1 = [[1 0 0 2]
[0 2 0 4]
[0 0 3 6]
[0 0 0 1]]

 

就先這樣吧…。

[python] pyinstall 在 windows 上的安裝使用

這次需要把 python 的程式丟到一個沒有裝 python 環境去,所以需要打包它。

預期的目標是不要事先安裝 python。

為了文章閱讀流暢,一些可選的手法就容後再補充了,免得原來是說明文的,變成手冊文。

我的環境是 windows 7, python 2.7, pyinstaller 2.1。

 

首先尋找 pyinstall 這個程式。從 pypi 下載 zip 檔。

https://pypi.python.org/packages/source/P/PyInstaller/PyInstaller-2.1.zip#md5=3eb18a454311707ab7808d881e677329

 

把它解開放到任何你想要的目錄。

然後在那裡開個命令列視窗,執行 setup.py install

安裝完之後,會在 C:\Python27\Scripts 的目錄裡,有 pyinstaller.exe。

然後在那裡開個命令列視窗,執行 pyinstaller --version

看到 2.1 的數字跑出來,就是安裝成功了。

 

在完成安裝之後,在 C:\Python27\Scripts 裡,會同時有以下的執行檔。

  • pyinstaller
  • pyi-makespec
  • pyi-build
  • pyi-archive_viewer
  • pyi-bindepend
  • pyi-grab_version
  • pyi-make_comserver

 

為了方便,請記得將 C:\Python27\Scripts 加到 windows 的執行路徑裡。

image

 

接下來實際做一個例子來試用 pyinstaller。

程式的功能,目前先設計為:

  1. 讀取外部的 json 檔裡的路徑設定
  2. 列出該路徑下的所有的專案檔 (結尾是 vbproj)

 

所以,打開 IDLE,寫 python 程式如下 path_info.py:

import json
import os

path_info_path = 'path_info.json'
path_info = []
def read_info():
    global path_info
    f = open(path_info_path,'r')
    path_info = json.load(f)
    f.close()

vbproj_list = []
def get_vbproj_list():
    global vbproj_list
    for path in path_info:
        for root,dirs,files in os.walk(path):
            for i in files:
                if i.endswith('.vbproj'):
                    vbproj_list.append(os.path.join(root,i))

if __name__ == '__main__':
    read_info()
    get_vbproj_list()
    for i in vbproj_list:
        print i

path_info.json 裡面的內容也準備好。

[
    ".",
    "..\\tmp\\"
]

 

打開命令列,位置換到 path_info.py 的位置

執行 >pyinstaller path_info.py

在一連串的輸出之後,在 dist 裡面會有 path_info 的目錄,裡頭就是執行所需的檔案,會有一個 path_info.exe,因此這一包 zip 起來就可以傳給其他人用。

如果希望是全部打包在一個檔案,就執行 >pyinstaller path_info.py -F

這樣,在 dist 裡面,就會有一個 path_info.exe,這個可以直接給別人用了。

 

 

 

參考:

https://github.com/pyinstaller/pyinstaller/wiki

http://pythonhosted.org/PyInstaller/

http://blog.float.tw/2013/10/use-pyinstaller-packages-python-programs.html

[vmware] 兩步驟把 c 槽硬碟變大 (win xp)

有時候一開始設定的硬碟不夠,會在之後遇到 c 槽不夠大的困境。

這時候,用兩步驟可以把 c 槽變大。

第一步,在 vm (之後叫做 vm1) 關機的情況下,使用 Utility 底下的 Expand 工具長大。

image

image

image

第二步,用另一個 vm (暫且叫做 vm2),把原來的 vm1 的 c 槽掛成 d 槽。開機之後,用 dispart 指令把分割變大。

image

image

image

之後,把 vm2 關機,移除第二顆硬碟。然後再把 vm1 開機,就看到 c 槽變成 20G 了。結束。