2016-09-23 7 views
1

私はサイズ(7,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私が受信

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

IJ値が正確

ある試みた何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 

スルー3210

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

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 

〜22列23

〜24
0  0 
0  0 
0  0 
0  0 
0  0 
0  0 
0  0 

答えて

4

これは、インデックスは、MATLABでどのように動作するかです。 Read more here

この問題を回避するために、線形インデックスを使用できます。あなたがであなたが望む添字の線形インデックスを取得することができます

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

そして、それらのものにアクセス(および1によって置き換え)によって:

matrix(linind)=1; 
2

だけ

[I,J] = ind2sub([7,24],find(matrix(:,:,2) <=1)); 
matrix(sub2ind([7,24,7],I,J,7*ones(length(I),1))) = 1; 
を試してみてください

リニアインデックスを使用してテーブルにアクセスする必要があります。

関連する問題