我想添加两个不同形状的numpy数组,但是没有广播,而是将“缺少的”值视为0。最简单的例子是
[1, 2, 3] + [2] -> [3, 2, 3]
或者
^{pr2}$我事先不知道形状。在
我在搞乱np形状对于每一个,试着找到包含它们的最小形状,将它们嵌入到该形状的零位数组中,然后将它们相加。但这似乎要做很多工作,有没有更简单的方法?在
提前谢谢!在
编辑:我所说的“大量工作”是指“为我做很多工作”,而不是机器,我追求的是优雅而不是效率:我努力使它们保持在最小的形状上
def pad(a, b) :
sa, sb = map(np.shape, [a, b])
N = np.max([len(sa),len(sb)])
sap, sbp = map(lambda x : x + (1,)*(N-len(x)), [sa, sb])
sp = np.amax( np.array([ tuple(sap), tuple(sbp) ]), 1)
不漂亮:-/
这是我能想到的最好的:
如果知道结果的维数,可以稍微清理for循环,例如:
^{pr2}$得到
np.shape
很简单,找到包含这两个元素的最小形状非常容易,当然添加也很简单,所以唯一“大量工作”的部分就是“将每个元素嵌入到该形状的零位数组中”。在是的,您可以通过调用^{} 方法(或者^{} 函数,如果您想复制而不是在原地更改它们),就可以消除这种情况。正如文件所解释的:
例如,如果静态地知道维度:
您可以尝试我的解决方案-对于维1数组,您必须将数组扩展到 维度2(如下例所示),然后将其传递给函数。在
相关问题 更多 >
编程相关推荐