我有一个大小为(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))
我收到的I
和J
值是准确的
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
答案 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;
您需要使用线性索引访问该表。