我是Mathematica的初学者。我的问题是:我在名为XCORD,YCORD,ZCORD的单独列表中有大量的x,y和z坐标,我想将它们组合在一个列表中
例:
如果x {co-oridinates列表由XCORD = {x1,x2,x3}
给出,y坐标列表由YCORD = {y1,y2,y3}
和z坐标列表ZCORD = {z1,z2,z3}
给出,我想得到一个结果列表看起来像这样的坐标:
{{x1,y1,z1},{x2,y2,z2},{x3,y3,z3}}
答案 0 :(得分:6)
您可以使用Transpose执行此操作:
XCORD = {x1, x2, x3};
YCORD = {y1, y2, y3};
ZCORD = {z1, z2, z3};
res = Transpose[{XCORD, YCORD, ZCORD}]
==> {{x1, y1, z1}, {x2, y2, z2}, {x3, y3, z3}}
有关使用列表的更多信息,请here,更具体地针对您的问题here。
请注意,最好(尽管允许)不要用大写字母启动你自己的任何变量。使用变量名称的小写开头意味着您永远不会与数千个以大写字母开头的内置符号发生冲突。
答案 1 :(得分:3)
使用MapThread函数的替代解决方案:
In[2]:= MapThread[List, {{x1, x2, x3}, {y1, y2, y3}, {z1, z2, z3}}]
Out[2]= {{x1, y1, z1}, {x2, y2, z2}, {x3, y3, z3}}
对于大型列表,Transpose的速度要快一些:
In[3]:= With[{n=10^6}, x=RandomReal[1, n]; y=RandomReal[2, n]; z=RandomReal[3, n];]
In[4]:= Transpose[{x, y, z}]; // Timing
Out[4]= {0.644832, Null}
In[5]:= MapThread[List, {x, y, z}]; // Timing
Out[5]= {5.87969, Null}