脾气暴躁的“正交”广播

本·农夫

感觉好像已经有一个问题要解决,但我找不到。

在numpy中,假设我有两个数组,A并且B,无论两个数组的维数如何,如何确保它们将“正交”广播?例如,我可以这样做:

import numpy as np

A1 = np.zeros((2,2))
A2 = np.zeros((2,2,2))
B = np.ones((2,2))

C1 = A1 + B[...,np.newaxis,np.newaxis]
C2 = A2 + B[...,np.newaxis,np.newaxis,np.newaxis]

print(C1.shape)
print(C2.shape)

这使

(2, 2, 2, 2)
(2, 2, 2, 2, 2)

作为输出。但是为了做到这一点,我必须知道至少一个数组中的维数。有没有办法不知道他们中的任何一个的方法?希望有道理。

迪卡卡

调整形状B以包含尾随的单例尺寸,其中包括A-

A + B.reshape(B.shape + tuple([1]*A.ndim)) # where A is generic ndarray

其中的某些NumPy ufuncshasouter方法可以处理所有工作。因此,对于添加项,我们可以简单地使用-

np.add.outer(B,A)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章