Matlab 如何矢量化sub2ind?

Matlab 如何矢量化sub2ind?,matlab,vectorization,Matlab,Vectorization,我有一个二维数组L,我试图为该数组的每一行创建一个线性索引向量ind L= 1 5 25 4 0 0 2 3 3 45 5 6 45 5 6 0 0 0 我使用lenr存储每行中非零元素的数量(从第1列开始) 然后我有1x45数组规则。存储在L中的索引引用规则中的元素。因为我想对代码进行矢量化,所以我决定创建线性索引,然后运行RULES(ind) 这非常有效: ind=sub2ind(size(L),1,lenr(1)); 虽然这不起作用: ind=sub2ind(size(L),1:3,

我有一个二维数组
L
,我试图为该数组的每一行创建一个线性索引向量
ind

L=
1 5 25 4 0 0 
2 3 3 45 5 6
45 5 6 0 0 0
我使用
lenr
存储每行中非零元素的数量(从第1列开始)

然后我有1x45数组
规则
。存储在
L
中的索引引用
规则中的元素。因为我想对代码进行矢量化,所以我决定创建线性索引,然后运行
RULES(ind)

这非常有效:

ind=sub2ind(size(L),1,lenr(1));
虽然这不起作用:

ind=sub2ind(size(L),1:3,1:lenr(1:3));
有什么想法吗

更新:

这是我最初尝试对代码进行矢量化的内容,但它不起作用,这就是我检查线性索引的原因:

rul=repmat(RULES,3);
result = rul((L(1:J,1:lenr(1:J))));

如果我正确地解释了您的编辑,您希望创建一个变量
result
,该变量包含
规则的元素,这些元素由
L
的非零元素指示。请注意,一般情况下,向量化
sub2ind
的最佳方法是不要使用
sub2ind

如果希望
result
成为线性数组,只需编写

%// transpose so that result is ordered by row
L_transposed = L.'; 
result = RULES(L_transposed(L_transposed>0));
相反,如果希望
result
是一个与
L
大小相同的数组,
L
中的所有数字都替换为
规则中的相应元素,则更简单:

result = L;
result(result>0) = RULES(result>0);

请提供一个完整的示例并解释您试图执行的操作。@excaze:Look my updates。为什么要使用
1:lenr(1:3)
而不是
lenr(1:3)
?@excaza:I使用1:lenr(1:3)来获取每行从1到相应长度的L元素(lenr包含不包括0的长度)在这里,让我来告诉你-
ind=reformate(1:numel(L),size(L,1),[])
然后
ind=allind(L~=0)
。不过还没有测试过。
result = L;
result(result>0) = RULES(result>0);