我错过了一些东西。我有一个一维阵列,我想广播到一个N-D阵列,但它不工作:
>>> import numpy as np
>>> np.broadcast_to(np.arange(12),(12,2,2))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\app\python\anaconda\2\lib\site-packages\numpy\lib\stride_tricks.py", line 173, in broadcast_to
return _broadcast_to(array, shape, subok=subok, readonly=True)
File "c:\app\python\anaconda\2\lib\site-packages\numpy\lib\stride_tricks.py", line 128, in _broadcast_to
op_flags=[op_flag], itershape=shape, order='C').itviews[0]
ValueError: operands could not be broadcast together with remapped shapes [original->remapped]: (12,) and requested shape (12,2,2)
当你广播到N-D时,新的形状必须与一维数组的输入相匹配。例如,您可以:
或者
^{pr2}$它不能将12个数字广播到长度为2的维度中,从您的例子来看。在
广播有两个步骤:
对于一个size(12,)数组,第一步可以生成(1,1,12),但不能生成(12,1,1)。第二步可以扩展到(2,2,12)。但是你想要。在
所以必须显式地添加尾随维度
所以根据这些规则,广播到(2,2,12)作品,并转置可以将其更改为(12,2,2)
广播到(12,12,12)相当于扩展(1,1,12)。
^{pr2}$arange
是最后一个维度,而不是第一个维度。我们不想分割最后一个维度解决方案
您需要将最后一个维度的大小作为第一个参数的大小(arange数组)。 这很管用。把12放在末尾然后换位
^{pr2}$
注意
看看文档,你似乎真的需要在两个位置都有相应的形状-数组和所需的形状。如果你有
然后,只要最后一个维度的形状是X,就可以有任何想要的形状
你可以用这个例子来测试
编辑:
关于@Divakar对OP(添加额外维度)的注释,似乎有两种可能的方法具有相同的结果
相关问题 更多 >
编程相关推荐