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]]

 

就先這樣吧…。

沒有留言:

張貼留言