是否有一些numpy糖用于将同质坐标恢复到2d坐标。
所以这个:
[[4,8,2],
6,3,2]]
成为这个:
[[2,4],
[3,1.5]]
答案 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])