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