Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 遍历向量_Matlab_Indexing - Fatal编程技术网

Matlab 遍历向量

Matlab 遍历向量,matlab,indexing,Matlab,Indexing,我写了这个(列,行和值是向量): 问题是k和l是向量,所以我不能写行==l或列==k(我想要那些I行(I)是l而列(I)是k) 确切的错误是:“mx_el_eq:nonconformantarguments(op1是46x1,op2是13x1)” 如何逐个使用列和行中的所有元素((列==k)和(行>k)) 我想到了这样的事情: for i = 1:length(column) k = column (i) 还有其他可能性吗 编辑: 正如我所说,我有一个稀疏矩阵(n,n)。我必须遍历所有

我写了这个(
是向量):

问题是
k
l
是向量,所以我不能写
行==l
列==k
(我想要那些
I
行(I)是
l
列(I)
k

确切的错误是:“
mx_el_eq:nonconformantarguments(op1是46x1,op2是13x1)

如何逐个使用列和行中的所有元素
((列==k)和(行>k))

我想到了这样的事情:

for i = 1:length(column)
    k = column (i)
还有其他可能性吗

编辑:

正如我所说,我有一个稀疏矩阵(n,n)。我必须遍历所有列,对于每一列(比如k),我必须遍历从k+1到n的行,并对非零元素进行处理

例如:

row    = [1 3 3 2 1 2]      % row > 2 is [0 1 1 0 0 0] 
column = [1 1 2 2 2 3]  % column == 2 is [0 0 1 1 1 0]  
value  = [8 7 9 5 6 7]  %(column == 2) & (row > 2) is [0 0 1 0 0 0] 
行((列==2)和(行>2))
是3
值(行==3列==2)
为9

我希望代码执行的操作:

k in {1, 2, 3}  %writing this I realized I did some useless operations, 
                %since I want just the distinct values of column
k = 1:  
    l in row ((column == 1) & (row > 1)) = {3}  
        l = 3:
            A_31 = value (row == 3 & column == 1) = 7
            %rest of the code
k = 2:
    l in row ((column == 2) & (row > 2)) = {3}
        l = 3
            A_32 = value (row == 3 & column == 2) = 9
            %rest of the code
k = 3:
    l in row ((column == 3) & (row > 3)) = nothing

查看下面代码中的
match\u value
值,看看是否可以使用它们-

row    = [1 3 3 2 1 2]      % row > 2 is [0 1 1 0 0 0] 
column = [1 1 2 2 2 3]  % column == 2 is [0 0 1 1 1 0]
value  = [8 7 9 5 6 7]

k_vector = 1:numel(column)
match_ind = bsxfun(@gt,row,k_vector') & bsxfun(@eq,column,k_vector')
match_value = bsxfun(@times,match_ind,value)
匹配值的输出

match_value =

     0     7     0     0     0     0
     0     0     9     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0
     0     0     0     0     0     0
如果您打算使用sparse作为输出,您可以很容易地这样做-

>> sparse(match_value)

ans =

   (1,2)        7
   (2,3)        9 

借助于
unique
,在列上迭代非常简单-我们可以很容易地拉出每个列下三角部分的非零元素,如下所示:

% this relies on 'row' and 'column' both being row vectors
for c = unique(column)
    colidx = (column == c);
    lowertri = (row > c) & colidx;
    v = value(lowertri);
    % do something with v
end

如果
v
元素的行索引也很重要(而不仅仅是迭代值本身),可以并行使用
row(row>c)
,或者以与列相同的方式在行上有一个内部循环。

对于i=1:length(column),k=column(i)似乎很好编码是,我知道它符合我的要求,但对MATLAB来说似乎有点不自然。对我来说似乎很自然,但让我们等待其他SO用户给出他们的意见。
都是相同的长度?是的。这是一个稀疏矩阵。
% this relies on 'row' and 'column' both being row vectors
for c = unique(column)
    colidx = (column == c);
    lowertri = (row > c) & colidx;
    v = value(lowertri);
    % do something with v
end