【发布时间】:2017-09-05 03:29:01
【问题描述】:
在一维中我可以轻松优雅地实现我想要的,但我无法将其转移到二维甚至更高维度
1-d
我有两个尺寸为 N = 3 的一维网格。
a = [1, 2, 3]
b = [10, 20, 30]
现在我想在所有这些网格对的差异/范数上评估函数 fun:
def fun(x):
return x
mgrid = np.meshgrid( a,b )
A = fun( np.abs(mgrid[0] - mgrid[1] ) )
结果 A 的大小为 N x N:
array([[ 9, 8, 7],
[19, 18, 17],
[29, 28, 27]])
这是
|b[0]-a[0]| |b[0]-a[1]| |b[0]-a[2]|
|b[1]-a[0]| |b[1]-a[1]| |b[1]-a[2]|
|b[2]-a[0]| |b[2]-a[1]| |b[2]-a[2]|
(为简洁起见,仅提供有趣的参数)
二维
现在在二维函数中乐趣保持不变。
我又有两个网格 a 和 b
ax = [1, 2, 3]
ay = [4, 5, 6]
bx = [10, 20, 30]
by = [40, 50, 60]
a = np.meshgrid(ax, ay)
b = np.meshgrid(bx, by)
现在,我怎样才能对上面的一维网格做同样的事情呢?
A的第一行:
|| (10 40) - (1 4) || || (10 40) - (1 5) || || (10 40) - (1 6) ||
|| (10 40) - (2 4) || || (10 40) - (2 5) || || (10 40) - (2 6) ||
|| (10 40) - (3 4) || || (10 40) - (3 5) || || (10 40) - (3 6) ||
(一切都在一行中,再次只是有趣的论点)
结果网格的大小应为 N * N x N * N。
我试图创建 a 和 b 的坐标
ca = np.array(list(zip(a[0].flatten(), a[1].flatten())))
cb = np.array(list(zip(b[0].flatten(), b[1].flatten())))
并从中创建一个网格:
mgrid = np.meshgrid([ca], [cb])
但单独的维度不适合(18 而不是 9)。
编辑:完全修改了问题。
【问题讨论】:
-
如何将输入展平为 1D,然后将其提供给 meshgrid?
-
如果
f()采用两个一维向量,f( np.abs(mgrid[0] - mgrid[1]) )如何给出有用的输出?这是一个 2D 输入。 -
另外,如果您不能直接告诉我们
f()是什么,请至少更清楚哪些输入和输出是什么形状和什么类型(array、tuple或list),因为您的变量名称不断变化并且您的符号不清楚。在这种情况下,minimal reproducible example 将给出明确的输入(类型、数字和形状)、明确的预期输出(类型、数字和形状)以及给定“玩具”输入的预期输出样本。我敢肯定所有东西都在某个地方,只是现在很难找到。 -
我修改了我的问题以使其更清晰。