gpt4 book ai didi

matlab - matlab中二维数组的索引

转载 作者:太空宇宙 更新时间:2023-11-03 19:38:10 25 4
gpt4 key购买 nike

我有一个仅包含零的 6X4 矩阵 M1。我还有两个一维数组 Y1Y2,每个数组的长度都是 4。这两个数组包含所需的索引值。现在,我想设置(转换为 1)矩阵 M1 的元素,这样M1(Y1:Y2) 等于 1

例如:Y1=[1 2 2 1]Y2=[3 4 5 3]
那么,M1 应该是

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

我可以使用 for 循环来做到这一点。但是有什么优化的方法吗? (我打算使用更大的矩阵)

最佳答案

使用cumsum!

>> szM = size(M1);
>> M1( sub2ind( szM, Y1, 1:szM(2) ) ) = 1
M1 =
1 0 0 1
0 1 1 0
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
>> M1( sub2ind( szM, Y2+1, 1:szM(2) ) ) = -1
M1 =
1 0 0 1
0 1 1 0
0 0 0 0
-1 0 0 -1
0 -1 0 0
0 0 -1 0
>> M = cumsum(M,1)
M =
1 0 0 1
1 1 1 1
1 1 1 1
0 1 1 0
0 0 1 0
0 0 0 0

一个陷阱:如果 Y2 中的任何一个等于 6,则将 Y2+1 设置为 -1 将超出矩阵维度。
要解决此问题,您可以在将 M 的元素设置为 -1 之前添加两行:

>> cols = 1:szM(2);
>> sel = Y2 < szM(1);
>> M1( sub2ind( szM, Y2(sel)+1, cols(sel) ) ) = -1

Pavan Yalamanchili's answer 的衍生产品使用 bsxfun:(悬停以查看:)

使用 bsxfun 而不使用 offsets:
M1 = bsxfun( @ge, (1:size(M1,1))', Y1 ) & bsxfun( @le, (1:size(M1,1))', Y2 );

关于matlab - matlab中二维数组的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17185174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com