结合两个列表和一个数组来创建一个 3D 数据列表
Combine two lists and one array to create a 3D data list
假设我有以下三个列表:
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]}]
哪个returns
{{i, a, 1}, {i, b, 2}, {i, c, 3}, {j, a, 4}, {j, b, 5}, {j, c, 6}}
似乎应该有更简单的方法来做到这一点。
简化 Bill 的回答
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}}
还有
Transpose@Append[Transpose@Tuples@{x, y}, Flatten@z]
{{i, a, 1}, {i, b, 2}, {i, c, 3}, {j, a, 4}, {j, b, 5}, {j, c, 6}}
Join @@ (Thread[{x[[#]], y, z[[#]]}, List] & /@ {1, 2})
{{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}};
其中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]}]
哪个returns
{{i, a, 1}, {i, b, 2}, {i, c, 3}, {j, a, 4}, {j, b, 5}, {j, c, 6}}
似乎应该有更简单的方法来做到这一点。
简化 Bill 的回答
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}}
还有
Transpose@Append[Transpose@Tuples@{x, y}, Flatten@z]
{{i, a, 1}, {i, b, 2}, {i, c, 3}, {j, a, 4}, {j, b, 5}, {j, c, 6}}
Join @@ (Thread[{x[[#]], y, z[[#]]}, List] & /@ {1, 2})
{{i, a, 1}, {i, b, 2}, {i, c, 3}, {j, a, 4}, {j, b, 5}, {j, c, 6}}