Arrays 理解Matlab代码

Arrays 理解Matlab代码,arrays,matlab,if-statement,variable-assignment,Arrays,Matlab,If Statement,Variable Assignment,我有一些代码,我一直在尝试对其进行一些小的调整。它使用fgets从一行中加载单个字符,并使用它为3D绘图中的点着色。所以应该是这样的 a p p n c 然后使用其他数据文件指定x、y、z点以给出这些。结果是一个非常漂亮的3D图 我对输入文件进行了编辑,使其可读 0 1 1 0 2 2 0 我要它把数字涂成同样的颜色 这就是我到目前为止在代码方面取得的进展: function PlotCluster(mcStep) clear all filename = input

我有一些代码,我一直在尝试对其进行一些小的调整。它使用
fgets
从一行中加载单个字符,并使用它为3D绘图中的点着色。所以应该是这样的

a
p
p
n
c
然后使用其他数据文件指定x、y、z点以给出这些。结果是一个非常漂亮的3D图

我对输入文件进行了编辑,使其可读

0
1
1
0
2
2
0
我要它把数字涂成同样的颜色

这就是我到目前为止在代码方面取得的进展:

    function PlotCluster(mcStep)

   clear all

   filename = input('Please enter filename:   ', 's');

   disp('Loading hopping site coordinates ...')
   load x.dat
   load y.dat
   load z.dat
   temp = z;
   z = x;
   x = temp;
   n_sites = length(x);

       disp('Loading hopping site types ...')
   fp = fopen([filename]);
   data = load(filename);  %# Load the data

   % Plot the devices
   % ----------------

   disp('Plotting the sample surface ...')
   figure
   disp('Hello world!')

   ia = data == 0;
   in = data == 1;
   ip = data == 2;
   disp('Hello Again')

   plot3(x(ia),y(ia),z(ia),'b.') %,'MarkerSize',4)
   hold on
   plot3(x(ic),y(ic),z(ic),'b.') %,'MarkerSize',4)
   plot3(x(in),y(in),z(in),'g.') %,'MarkerSize',4)
   plot3(x(ip),y(ip),z(ip),'r.') %,'MarkerSize',4)
   daspect([1 1 1])
   set(gca,'Projection','Perspective')
   set(gca,'FontSize',16)   
   axis tight
   xlabel('z (nm)','FontSize',18)
   ylabel('y (nm)','FontSize',18)
   zlabel('x (nm)','FontSize',18)
   %title(['Metropolis Monte Carlo step ' num2str(mcStep)])

   view([126.5   23])
我的问题是我犯了这个错误

Index exceeds matrix dimensions.

Error in PlotCluster (line 34)
   plot3(x(ia),y(ia),z(ia),'b.') %,'MarkerSize',4)
我不明白为什么ia会超出x数组的界限。是否将
fgets
更改为
load
语句?这是让它读入正确数字的唯一方法(不是49和50,这是非常奇怪的)

让我感到困惑的主要是这些行(其中数字用于对应“a”、“n”、“p”等)

它们看起来像隐含的
if
语句,赋值从
data
ia
等,其中ia成为一个数组。但我不确定


如果您能帮助理解这一点,我们将不胜感激。

我已经解决了这个问题,因为我没有正确更新输入。为了澄清这个问题:ia=data==0意味着“使数组与数据大小相同,并根据逻辑(data==0)是真是假填充1或0”

我已经解决了这个问题,我没有正确更新输入。若要为任何遇到此问题的人澄清此问题:
ia=data==0
意味着“使数组与数据大小相同,并根据逻辑(data==0)是真是假将其填充为1或0”如果解决了您的问题,请将此作为答案发布。抱歉,这仍然是一个新问题。我会的!刚刚被告知,声誉低于100的用户在提问后8小时内无法回答自己的问题。您可以在3小时内自行回答。在此之前,请使用评论或编辑您的问题。
   ia = data == 0;
   in = data == 1;
   ip = data == 2;