MATLAB将整数放在错误的索引

时间:2016-09-23 09:37:25

标签: matlab matrix

我有一个大小为(3,24,7)的3d矩阵,我要做的是找到matrix(:,:,2)的所有小于1的索引并将matrix(:,:,7)中的索引替换为1 matrix(:,:,2)看起来像这样的事情

  
    

第1至13栏

  
   NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN         0    3.2146    3.4017    4.1404    4.1567
   NaN       NaN       NaN       NaN       NaN       NaN       NaN   12.7279       NaN         0    3.5119    3.4034    4.0415
   NaN       NaN       NaN       NaN       NaN       NaN    0.5000         0   13.4483   13.0618   11.4976   12.7435   12.0439
   NaN       NaN       NaN       NaN       NaN       NaN    0.5175         0       NaN    2.7080    5.9442    4.5981   14.4535
     0         0       NaN       NaN       NaN       NaN    0.5774       NaN   12.0000   10.7083   14.5308   15.5869   14.1067
   NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN
   NaN       NaN       NaN       NaN       NaN       NaN       NaN         0       NaN       NaN       NaN       NaN       NaN
  
    

第14至24栏

  
    3.7342    3.0119    2.8785    2.0736    1.4142    2.8284         0       NaN       NaN       NaN       NaN
    3.1623    3.8173    3.8297    6.8981    9.1788    9.1287    8.5781    7.8951    3.7859       NaN       NaN
    9.2402    6.8328    6.8874   11.2933   16.5555   17.5816   16.9247   14.8052    9.0701       NaN       NaN
   15.3199   13.0767   12.2584   10.8546   11.5016   11.1679   10.7414    7.5572    7.1201       NaN       NaN
   13.1808   11.8533    7.2023   11.7163   12.9769   12.3000   10.7779   10.6315    5.1769       NaN       NaN
       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN
       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN       NaN

我试过的是

[I,J] = ind2sub([7,24],find(matrix(:,:,2) <=1))

我收到的IJ值是准确的

  
    

I =

  
 5
 5
 3
 4
 5
 3
 4
 7
 1
 2
 1
  
    

J =

  
 1
 2
 7
 7
 7
 8
 8
 8
 9
10
20

但是当我将这些指数转换为值1时,我得到错误指数的1,是否有人知道我做错了什么?

 matrix(I,J,7) = 1

matrix(:,:,7) =

第1至22栏

 1     1     0     0     0     0     1     1     1     1     0     0     0     0     0     0     0     0     0     1     0     0
 1     1     0     0     0     0     1     1     1     1     0     0     0     0     0     0     0     0     0     1     0     0
 1     1     0     0     0     0     1     1     1     1     0     0     0     0     0     0     0     0     0     1     0     0
 1     1     0     0     0     0     1     1     1     1     0     0     0     0     0     0     0     0     0     1     0     0
 1     1     0     0     0     0     1     1     1     1     0     0     0     0     0     0     0     0     0     1     0     0
 0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
 1     1     0     0     0     0     1     1     1     1     0     0     0     0     0     0     0     0     0     1     0     0

第23至24栏

 0     0
 0     0
 0     0
 0     0
 0     0
 0     0
 0     0

2 个答案:

答案 0 :(得分:4)

这就是索引在MATLAB中的工作原理。 Read more here

为了避免这个问题,你可以使用线性指数。

您可以通过以下方式获取所需下标的线性索引:

linind=sub2ind(size(matrix),I,J,7*ones(size(I)));

通过以下方式访问这些(并由1替换)

matrix(linind)=1;

答案 1 :(得分:2)

试试

[I,J] = ind2sub([7,24],find(matrix(:,:,2) <=1));
matrix(sub2ind([7,24,7],I,J,7*ones(length(I),1))) = 1;

您需要使用线性索引访问该表。