将同构坐标恢复为2d的有用方法?

时间:2017-05-11 20:55:26

标签: numpy coordinates projection

是否有一些numpy糖用于将同质坐标恢复到2d坐标。

所以这个:

[[4,8,2],
6,3,2]]

成为这个:

[[2,4],
[3,1.5]]

2 个答案:

答案 0 :(得分:2)

一种利用broadcasted元素划分的方法 -

from __future__ import division

a[:,:2]/a[:,[-1]]

我们可以使用a[:,-1,None]a[:,-1][:,None]a[:,-1].reshape(-1,1)代替a[:,[-1]]。使用a[:,[-1]],我们保持完好无损的数量,让我们执行广播部门。

另一个np.true_divide再次使用broadcasting -

np.true_divide(a[:,:2], a[:,[-1]])

示例运行 -

In [194]: a
Out[194]: 
array([[4, 8, 2],
       [6, 3, 2]])

In [195]: a[:,:2]/a[:,[-1]]
Out[195]: 
array([[ 2. ,  4. ],
       [ 3. ,  1.5]])

In [196]: np.true_divide(a[:,:2], a[:,[-1]])
Out[196]: 
array([[ 2. ,  4. ],
       [ 3. ,  1.5]])

答案 1 :(得分:1)

如果您将输入作为名为x的向量输入,则可以执行

x[:-1]/x[-1]

完整示例:

import numpy as np
x = np.array([6,3,2])
x[:-1]/x[-1]    # array([ 3. ,  1.5])

您也可以将它应用于数组中的多个坐标:

xs = np.array([[4,8,2],[6,3,2]])
np.array([x[:-1]/x[-1] for x in xs])    # array([[ 2. ,  4. ],
                                        #        [ 3. ,  1.5]])

如果要重复使用此功能,可以定义函数homogen

homogen = lambda x: x[:-1]/x[-1]

# previous stuff bevomes something like
np.array([homogen(x) for x in xs])