MATLAB 下标索引必须是实数正整数或逻辑数

计算科学 matlab 矩阵
2021-12-21 15:47:21

我有一个包含 x、y 和 z 坐标的 anx 3 double。有人可以告诉我我哪里出错了吗?

store_y_temp=real(Y(Y>Iy));
store_z_temp=Z(store_y_temp);

错误:下标索引必须是实数正整数或逻辑数。

3个回答

我建议你正在做类似的事情

找到这样的点y- 这个坐标n×3数组大于一些Iy,然后找到这些点'z-坐标。

你有几种方法可以做到这一点。

最简单的命令是(如果我们假设同一行对应同一点):

z_temp = z(y>Iy);

要么

z_temp = z(find(y>Iy));

y>Iy1如果满足条件,则返回条目中的逻辑向量,0否则。find查找非零条目的索引。虽然第一个更快(如果您在编写脚本时使用第二个,mlint会提醒您第一个方法更好......)。

例子:

  x = [1; 2; 3; 4];
  y = [1/2; -1/2; -3/2; 3/2];
  z = [5; 6; 7; 8];

键入第一个命令结果:

>> z_temp = z(y>0)
   z_temp = 
           5
           8   

您收到错误的原因store_y_temp是不是整数,您使用它来引用数组索引。检查一个类似的问题

a=imread('3.jpg'); a1=零(大小(a));对于 i=1:size(a,1) 对于 j=1:size(a,2) 对于 k=1:3 if((a((i-1),j,k)>=a(i,j ,k) && a(i,j,k)>=a((i+1),j,k)) ||(a((i-1),j,k)>=a(i,j, k)&& a(i,j,k)>=a((i+1),j,k))||(a(i,(j-1),k)>=a(i,j,k )&& a(i,j,k)>=a(i,(j+1),k))|| (a(i,(j-1),k)<=a(i,j,k) && a(i,j,k)<=a(i,(j+1),k))|| (a((i+1),(j+1),k)>=a(i,j ,k)&&a(i,j,k)>=a((i-1),(j+1),k))|| (a((i+1),(j+1),k)< =a(i,j,k)&&a(i,j,k)<=a((i-1),(j+1),k))|| (a((i-1),(j- 1),k)>=a(i,j,k)&& a(i,j,k)>=a((i+1),(j+1),k))|| (a((i -1),(j-1),k)<=a(i,j,k)&& a(i,j,k)<=a((i+1),(j+1),k)) ) a1(i,j,k)=圆形(a(i,j,k)); 否则 a1(i,j,k)=round((a((i-1),(j-1),k)+a((i-1),j,k)+a((i-1) ,(j+1),k)+a(i,(j-1),k)+a(i,(j+1),k)+a((i+1),(j-1), k)+a((i+1),j,k)+a((i+1),(j+1),k))/8);结束结束结束???下标索引必须是实数正整数或逻辑数。

请帮我