[英]Matlab to python conversion matrix operations
嗨,我想隐瞒这个距离公式,以了解从Matlab到python的直线距离。 X1和X2是两个二维点的矩阵,长度可能不同。
nd = size(X1); n = nd(1);
d = nd(2);
m = size(X2,1);
D = abs(X1(:,ones(1,m)) - X2(:,ones(1,n))') + ...
abs(X1(:,2*ones(1,m)) - X2(:,2*ones(1,n))');
我认为我在python中最常遇到的问题是将那些矩阵附加到X1和X2,因为它们是np.arrays。
首先您的代码:
octave:1> X1=[0,1,2,3;2,3,1,1]'
octave:2> X2=[2,3,2;4,2,4]'
<your code>
octave:21> D
D =
4 3 4
2 3 2
3 2 3
4 1 4
匹配的numpy
代码:
X1=np.array([[0,1,2,3],[2,3,1,1]]).T
X2=np.array([[2,3,2],[4,2,4]]).T
D=np.abs(X1[:,None,:]-X2[None,:,:]).sum(axis=-1)
产生, D
:
array([[4, 3, 4],
[2, 3, 2],
[3, 2, 3],
[4, 1, 4]])
numpy
自动广播,因此不需要ones()
来扩展尺寸。 相反,我使用None
(与np.newaxis
相同)来创建新尺寸。 然后,差异为3D
,然后在最后一个轴上求和。
我忘了numpy
broadcasting
对我们有多糟。 尽管较新的Octave具有类似的功能:
D = sum(abs(reshape(X1,[],1,2)-reshape(X2,1,[],2)),3)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.