Python Numpy:未使用np.REFORMATE的广播错误?

Python Numpy:未使用np.REFORMATE的广播错误?,python,numpy,Python,Numpy,我刚刚发现,尽管有一个python显示为(5000,1)和(50003072)的数组,从技术上讲,它应该可以执行广播来生成(50003072),但如果我们不显式地将它们重塑为这些形状,它有时就不起作用了 我有一组数据,我只是简单地提取它们并运行,最初我只是接受它呈现的任何形状,但它一直给我广播中的错误。我只是想知道我描述的这个错误是不是真的,或者是否有一些功能或事情我应该做,但我没有做,这导致了广播中的错误 我也用随机矩阵测试了 np.random.rand(50003072)和 np.随机兰特

我刚刚发现,尽管有一个python显示为(5000,1)和(50003072)的数组,从技术上讲,它应该可以执行广播来生成(50003072),但如果我们不显式地将它们重塑为这些形状,它有时就不起作用了

我有一组数据,我只是简单地提取它们并运行,最初我只是接受它呈现的任何形状,但它一直给我广播中的错误。我只是想知道我描述的这个错误是不是真的,或者是否有一些功能或事情我应该做,但我没有做,这导致了广播中的错误

我也用随机矩阵测试了 np.random.rand(50003072)和 np.随机兰特(5000,1)
两个矩阵相减有效,所以广播在这种情况下有效

正在广播的阵列具有形状
(50003072)
(5000,)
。 第一个数组是二维的,但第二个数组是一维的。NumPy广播始终添加新轴(尺寸)。因此,尽管
(5000,)
可以向
(N,5000)
广播任何
N
,但它不能向
(5000,3072)
广播(没有明确的帮助)

要解决此问题,必须将新轴添加到右侧的第二个阵列中


比如说,

In [16]: dist_vector = np.arange(5000)

In [17]: dist_vector.shape
Out[17]: (5000,)

In [18]: dist_vector = dist_vector[:, np.newaxis]

In [19]: dist_vector.shape
Out[19]: (5000, 1)

请注意,形状
(5000,)
(5000,1)
的形状不同。第一个形状表示数组是一维的,因为元组
(5000,)
只包含一个值<代码>(5000,1)表示数组是二维的



在文档中,请注意阵列的形状是右对齐的。这就是允许短形状(尺寸较小的阵列形状)在左侧添加新轴的原因

正在广播的阵列具有形状
(50003072)
(5000,)
。 第一个数组是二维的,但第二个数组是一维的。NumPy广播始终添加新轴(尺寸)。因此,尽管
(5000,)
可以向
(N,5000)
广播任何
N
,但它不能向
(5000,3072)
广播(没有明确的帮助)

要解决此问题,必须将新轴添加到右侧的第二个阵列中


比如说,

In [16]: dist_vector = np.arange(5000)

In [17]: dist_vector.shape
Out[17]: (5000,)

In [18]: dist_vector = dist_vector[:, np.newaxis]

In [19]: dist_vector.shape
Out[19]: (5000, 1)

请注意,形状
(5000,)
(5000,1)
的形状不同。第一个形状表示数组是一维的,因为元组
(5000,)
只包含一个值<代码>(5000,1)表示数组是二维的



在文档中,请注意阵列的形状是右对齐的。这就是允许短形状(尺寸较小的阵列形状)在左侧添加新轴的原因

非常感谢你!你教会了我一些非常有用的东西。非常感谢你!你教会了我一些非常有用的东西。