假设我有以下三个列表:
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
可能是非均匀采样的。
答案 0 :(得分:3)
简化比尔的回答
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 }}
答案 1 :(得分:2)
也许
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}}
似乎应该有一种更简单的方法。
答案 2 :(得分:0)
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 }}