Wolfram mathematica 组合两个列表和一个数组以创建三维数据列表

Wolfram mathematica 组合两个列表和一个数组以创建三维数据列表,wolfram-mathematica,Wolfram Mathematica,假设我有以下三个列表: x = {i, j}; y = {a, b, c}; z = {{1, 2, 3}, {4, 5, 6}}; 其中,z是对应于x和y坐标的数据,z(x_i,y_j)=z_ij。我需要创建以下表单的数组: zz = {{i, a, 1}, {i, b, 2}, {i, c, 3}, {j, a, 4}, {j, b, 5}, {j, c, 6}} 我如何在Mathematica 10.0中高效地完成它? 这是我迄今为止的尝试: zz = Table[{x[[ii]],

假设我有以下三个列表:

x = {i, j};
y = {a, b, c};
z = {{1, 2, 3}, {4, 5, 6}};
其中,
z
是对应于
x
y
坐标的数据,
z(x_i,y_j)=z_ij
。我需要创建以下表单的数组:

zz = {{i, a, 1}, {i, b, 2}, {i, c, 3}, {j, a, 4}, {j, b, 5}, {j, c, 6}}
我如何在Mathematica 10.0中高效地完成它?


这是我迄今为止的尝试:

zz = Table[{x[[ii]], y[[jj]], z[[ii, jj]]}, {ii, 1, Length[x]}, {jj, 1, Length[y]}]~Flatten~1
我的最终目标是绘制(
ListPlot3D[zz]
)或插值此数据(
Interpolation[zz]
),并且
x
y
可能是非均匀采样。

可能是这样

x = {i, j}; y = {a, b, c}; z = {{1, 2, 3}, {4, 5, 6}};
zz=MapThread[Flatten[List[#1,#2]] &, {Flatten[Outer[List,x,y],1], Flatten[z]}]
返回

{{i, a, 1}, {i, b, 2}, {i, c, 3}, {j, a, 4}, {j, b, 5}, {j, c, 6}}

似乎应该有一种更简单的方法来做这件事。

简化比尔的答案

x = {i, j};
y = {a, b, c};
z = {{1, 2, 3}, {4, 5, 6}};

MapThread[Append, {Flatten[Outer[List, x, y], 1], Flatten@z}]
{i,a,1},{i,b,2},{i,c,3},{j,a,4},{j,b,5},{j,c,6}

{i,a,1},{i,b,2},{i,c,3},{j,a,4},{j,b,5},{j,c,6}

{i,a,1},{i,b,2},{i,c,3},{j,a,4},{j,b,5},{j,c,6}


对于大型列表,这种方法所用的时间几乎与我的方法相同:(很好,第一种方法比Bill对大型数组的回答快近两倍。第二种方法快十倍:OThis可能更快,因为它避免了转置:
MapThread[Append,{Tuples@{x,y},Flatten@z}]
它不是:)它和你第一次猜测的速度一样快
Transpose@Append[Transpose@Tuples@{x, y}, Flatten@z]
Join @@ (Thread[{x[[#]], y, z[[#]]}, List] & /@ {1, 2})