matlab中如何给一个矩阵中的某几个特定位置赋值

比如说我有一个矩阵:a = zeros(5);
还有两列向量:i = [2;3;4]; j = [1;4;2];
想使得a(i(k),j(k))=1,也就是说让a的第2行第1列、第3行第4列、第4行第2列这三个位置上的元素等于1。
不用循环,也不通过转稀疏矩阵,最好只用一条语句来实现。

用sub2ind

>> a=zeros(5); i = [2;3;4]; j = [1;4;2];

>> a(sub2ind(size(a), i, j))=1

a =

0 0 0 0 0

1 0 0 0 0

0 0 0 1 0

0 1 0 0 0

0 0 0 0 0

扩展资料:

注意事项

MATLAB书写表达式的规则与“手写算式”差不多相同。

如果一个指令过长可以在结尾加上...(代表此行指 令与下一行连续),例如

?3*...

6

ans =

18

在matlab中,可通过如下方式给矩阵赋值:


a = zeros(3,4);   % 初始化一个3*4的矩阵

>>a = 

0 0 0 0

0 0 0 0

0 0 0 0

 a(1,2) = 5;   % 将矩阵a的第1行第2列个元素赋值为5

>>a = 

0 5 0 0

0 0 0 0

0 0 0 0 

a(2) = 6;   % 将矩阵a的第2个元素(按列开始计算)赋值为6

>>a = 

0 5 0 0

6 0 0 0

0 0 0 0 

a(3,:) = [1 2 3 4];   % 将矩阵a的第3行赋值为[1 2 3 4]

>>a = 

0 5 0 0

6 0 0 0

1 2 3 4

   

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-11
用sub2ind

>> a=zeros(5); i = [2;3;4]; j = [1;4;2];
>> a(sub2ind(size(a), i, j))=1

a =

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

hokvens: 这个正是matlab的精髓,matlab里面很多东西都不需要循环来完成,速度快而且语句简单本回答被提问者采纳
第2个回答  推荐于2017-09-06
比如:
k1=[1,2;3,4];
K=zeros(4);
把k1的值赋在K的特定位置后,获得
K=[0,1,0,2;
0,0,0,0;
0,3,0,4;
0,0,0,0;]

K([1 3],[2 4]) = k1
第3个回答  2009-11-18
直接赋值不行吗?
a(2,1)=1;a(3,4)=1;a(4,2)=1;
第4个回答  2019-10-06
用sub2ind
>>a=zeros(5);i=[2;3;4];j=[1;4;2];
>>a(sub2ind(size(a),i,j))=1
a=
00000
10000
00010
01000
00000
hokvens:这个正是matlab的精髓,matlab里面很多东西都不需要循环来完成,速度快而且语句简单
相似回答