<p>对问题中newaxis版本的解释:这些是<em>不是</em>矩阵乘法,ndarray multiply是用<a href="http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html" rel="nofollow">broadcasting</a>逐元素相乘。步进[:,newaxis,newaxis]是num_步数x 1 x 1,point[newaxis,:,:]是1 x num_points x num_维度。与shape(num_steps x 1 x 1)和(1 x num_points x num_dimensions)一起广播可以工作,因为广播规则是每个维度都应该是1或相同的;这只是意味着“将维度为1的数组重复与另一个数组对应维度相同的次数”。这将以非常有效的方式生成具有形状(num_steps x num_points x num_dimensions)的ndarray;i,j,k下标将是第i步沿着第j条线的第k个坐标(由第j对起点和终点给出)。在</p>
<p>演练:</p>
<pre><code>>>> start_points = numpy.array([[1, 0, 0], [0, 1, 0]])
>>> end_points = numpy.array([[10, 0, 0], [0, 10, 0]])
>>> steps = numpy.arange(10)/9.0
>>> start_points.shape
(2, 3)
>>> steps.shape
(10,)
>>> steps[:,numpy.newaxis,numpy.newaxis].shape
(10, 1, 1)
>>> (steps[:,numpy.newaxis,numpy.newaxis] * start_points).shape
(10, 2, 3)
>>> (steps[:,numpy.newaxis,numpy.newaxis] * (end_points - start_points)) + start_points
array([[[ 1., 0., 0.],
[ 0., 1., 0.]],
[[ 2., 0., 0.],
[ 0., 2., 0.]],
[[ 3., 0., 0.],
[ 0., 3., 0.]],
[[ 4., 0., 0.],
[ 0., 4., 0.]],
[[ 5., 0., 0.],
[ 0., 5., 0.]],
[[ 6., 0., 0.],
[ 0., 6., 0.]],
[[ 7., 0., 0.],
[ 0., 7., 0.]],
[[ 8., 0., 0.],
[ 0., 8., 0.]],
[[ 9., 0., 0.],
[ 0., 9., 0.]],
[[ 10., 0., 0.],
[ 0., 10., 0.]]])
</code></pre>
<p>如您所见,这将产生正确的答案:)在本例中,广播(10,1,1)和(2,3)结果为(10,2,3)。你所拥有的是广播(10,1,1)和(1,2,3),两者完全相同,也产生(10,2,3)。在</p>
<p>问题的距离部分的代码不需要newaxis:输入的是num_points x num_维度,输出是num_points,因此必须删除一个维度。这实际上是你沿着的轴求和。这应该是有效的:</p>
^{pr2}$
<p>这里数字总和(…,axis=1)表示仅沿该轴求和,而不是所有元素:shape num_points x num_dimensions沿axis=1求和的ndarray将生成具有num_points的结果,这是正确的。在</p>
<p>编辑:删除了没有广播的代码示例。
编辑:修正了索引的顺序。
编辑:添加行距离</p>