【发布时间】:2021-05-10 22:19:12
【问题描述】:
einsum 的 example in numpy's documentation 表示 np.einsum('ij->i', a) 的功能类似于 np.sum(a, axis=1)。下面,示例 1 证实了这一点,而示例 2 则与之相矛盾。知道我在做什么(预期)错了吗?
Exp 1.
import numpy as np
a = np.arange(25).reshape(5,5)
b1 = np.einsum('ij->i', a) # array([ 10, 35, 60, 85, 110])
b2 = np.sum(a, axis=1) # array([ 10, 35, 60, 85, 110])
Exp 2.
import numpy as np
import cv2
img_path = "path/to/an/image.png"
im = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE) # type: numpy.ndarray
n1 = np.einsum('ij->i', im)
n2 = np.sum(img, axis=1)
# to show that they are different.
print(np.max(n1), np.max(n2)) # out: 255 119630
为什么n1 和n2 不相同(正如它们的max 值所示)?
【问题讨论】:
-
正如所写,没有人可以复制这个,不知道
img_path。实际上,您的第二个代码块中似乎有错字:im/img。如果您可以在您的问题正文中提供一个较小的、可重复的示例来说明这种效果,那就太好了。即使只是打印img的形状也会提供信息。 -
@NicholasM,谢谢。我做了一些改变。它是可重现的;然而,用户需要在他们的本地机器上安装一个图像。形状取决于加载的图像。如果有帮助,我的是一张 512X512 的图像,它变成了相同形状的二维矩阵。
标签: python cv2 numpy-einsum