两个numpy数组的平均绝对差
Mean absolute difference of two numpy arrays
我有两个一维 NumPy 数组 X
和 Y
。我需要计算 X
的每个元素与 Y
的每个元素之间的平均绝对差。天真的方法是使用嵌套的 for
循环:
import numpy as np
np.random.seed(1)
X = np.random.randint(10, size=10)
Y = np.random.randint(10, size=10)
s = 0
for x in X:
for y in Y:
s += abs(x - y)
mean = s / (X.size * Y.size)
#3.4399999999999999
问题:NumPy 是否提供该解决方案的矢量化、更快的版本?
已编辑: 我需要平均 绝对 差异(始终为非负数)。抱歉造成混淆。
取差,然后取abs,然后取均值:
np.mean(np.abs(X - Y))
或者:
diff = X - Y
abs_diff = np.abs(diff)
mean_diff = np.sum(abs_diff) / (X.size * Y.size)
如果您在相反的轴上平铺,那么您可以 abs
差异如下:
代码:
x = np.tile(X, (X.size, 1))
y = np.transpose(np.tile(Y, (Y.size, 1)))
mean_diff = np.sum(np.abs(x-y)) / (X.size * Y.size))
测试代码:
import numpy as np
X = np.random.randint(10, size=10)
Y = np.random.randint(10, size=10)
s = 0
for x in X:
for y in Y:
s += abs(x - y)
mean = s / (X.size * Y.size)
print(mean)
x = np.tile(X, (X.size, 1))
y = np.transpose(np.tile(Y, (Y.size, 1)))
print(np.sum(np.abs(x-y)) / (X.size * Y.size))
结果:
3.48
3.48
如果我正确理解你在这里的定义,你可以使用广播。
np.mean(np.abs(X[:, None] - Y))
我有两个一维 NumPy 数组 X
和 Y
。我需要计算 X
的每个元素与 Y
的每个元素之间的平均绝对差。天真的方法是使用嵌套的 for
循环:
import numpy as np
np.random.seed(1)
X = np.random.randint(10, size=10)
Y = np.random.randint(10, size=10)
s = 0
for x in X:
for y in Y:
s += abs(x - y)
mean = s / (X.size * Y.size)
#3.4399999999999999
问题:NumPy 是否提供该解决方案的矢量化、更快的版本?
已编辑: 我需要平均 绝对 差异(始终为非负数)。抱歉造成混淆。
取差,然后取abs,然后取均值:
np.mean(np.abs(X - Y))
或者:
diff = X - Y
abs_diff = np.abs(diff)
mean_diff = np.sum(abs_diff) / (X.size * Y.size)
如果您在相反的轴上平铺,那么您可以 abs
差异如下:
代码:
x = np.tile(X, (X.size, 1))
y = np.transpose(np.tile(Y, (Y.size, 1)))
mean_diff = np.sum(np.abs(x-y)) / (X.size * Y.size))
测试代码:
import numpy as np
X = np.random.randint(10, size=10)
Y = np.random.randint(10, size=10)
s = 0
for x in X:
for y in Y:
s += abs(x - y)
mean = s / (X.size * Y.size)
print(mean)
x = np.tile(X, (X.size, 1))
y = np.transpose(np.tile(Y, (Y.size, 1)))
print(np.sum(np.abs(x-y)) / (X.size * Y.size))
结果:
3.48
3.48
如果我正确理解你在这里的定义,你可以使用广播。
np.mean(np.abs(X[:, None] - Y))