Numpy 数组添加变得像 np.einsum() 一样简单?
Numpy array addition made as simple as np.einsum()?
如果我有 a.shape = (3,4,5)
和 b.shape = (3,5)
,使用 np.einsum()
可以使广播然后将两个数组相乘变得非常简单和明确:
result = np.einsum('abc, ac -> abc', a, b)
但是如果我想 add 这两个数组,据我所知,我需要两个单独的步骤,以便广播正常进行,代码感觉不那么明确。
b = np.expand_dims(b, 1)
result = a + b
有什么办法可以让我以 np.einsum()
的清晰度进行此数组加法?
广播只能发生在一个额外的 dimension 上。要添加这两个数组,可以将它们展开为一行,如下所示:
import numpy as np
a = np.random.rand(3,4,5); b = np.random.rand(3,5);
c = a + b[:, None, :] # c is shape of a, broadcasting occurs along 2nd dimension
请注意,这与 c = a + np.expand_dim(b, 1)
没有任何不同。就清晰度而言,这是个人风格。我更喜欢广播,其他人更喜欢einsum
如果我有 a.shape = (3,4,5)
和 b.shape = (3,5)
,使用 np.einsum()
可以使广播然后将两个数组相乘变得非常简单和明确:
result = np.einsum('abc, ac -> abc', a, b)
但是如果我想 add 这两个数组,据我所知,我需要两个单独的步骤,以便广播正常进行,代码感觉不那么明确。
b = np.expand_dims(b, 1)
result = a + b
有什么办法可以让我以 np.einsum()
的清晰度进行此数组加法?
广播只能发生在一个额外的 dimension 上。要添加这两个数组,可以将它们展开为一行,如下所示:
import numpy as np
a = np.random.rand(3,4,5); b = np.random.rand(3,5);
c = a + b[:, None, :] # c is shape of a, broadcasting occurs along 2nd dimension
请注意,这与 c = a + np.expand_dim(b, 1)
没有任何不同。就清晰度而言,这是个人风格。我更喜欢广播,其他人更喜欢einsum