Python Numpy:未使用np.REFORMATE的广播错误?
我刚刚发现,尽管有一个python显示为(5000,1)和(50003072)的数组,从技术上讲,它应该可以执行广播来生成(50003072),但如果我们不显式地将它们重塑为这些形状,它有时就不起作用了 我有一组数据,我只是简单地提取它们并运行,最初我只是接受它呈现的任何形状,但它一直给我广播中的错误。我只是想知道我描述的这个错误是不是真的,或者是否有一些功能或事情我应该做,但我没有做,这导致了广播中的错误 我也用随机矩阵测试了 np.random.rand(50003072)和 np.随机兰特(5000,1)Python Numpy:未使用np.REFORMATE的广播错误?,python,numpy,Python,Numpy,我刚刚发现,尽管有一个python显示为(5000,1)和(50003072)的数组,从技术上讲,它应该可以执行广播来生成(50003072),但如果我们不显式地将它们重塑为这些形状,它有时就不起作用了 我有一组数据,我只是简单地提取它们并运行,最初我只是接受它呈现的任何形状,但它一直给我广播中的错误。我只是想知道我描述的这个错误是不是真的,或者是否有一些功能或事情我应该做,但我没有做,这导致了广播中的错误 我也用随机矩阵测试了 np.random.rand(50003072)和 np.随机兰特
两个矩阵相减有效,所以广播在这种情况下有效 正在广播的阵列具有形状
(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)表示数组是二维的
在文档中,请注意阵列的形状是右对齐的。这就是允许短形状(尺寸较小的阵列形状)在左侧添加新轴的原因 非常感谢你!你教会了我一些非常有用的东西。非常感谢你!你教会了我一些非常有用的东西。