d*****u 发帖数: 17243 | 1 如果我有一个矩阵M
现在要把其中一些元素设为1
这些元素的坐标在一个n*2的矩阵里
比如[1 1; 3 5; 4 5] 也就是说M(1,1),M(3,5), M(4,5)需要设为1
在matlab里怎么弄最有效呢?
我知道可以用for loop,但最好避免 | t****t 发帖数: 6806 | 2 M((a(:,2)-1)*size(M, 1)+a(:,1)) = 1;
EDIT: typo and forgot matlab is 1-based index... (too much C programming)
【在 d*****u 的大作中提到】 : 如果我有一个矩阵M : 现在要把其中一些元素设为1 : 这些元素的坐标在一个n*2的矩阵里 : 比如[1 1; 3 5; 4 5] 也就是说M(1,1),M(3,5), M(4,5)需要设为1 : 在matlab里怎么弄最有效呢? : 我知道可以用for loop,但最好避免
| h*******s 发帖数: 8454 | 3 解说一下thrust的解法:
matlab可以把一个矩阵当做一个长的列向量,用一个数引用,而不一定非要用(行 列)
【在 d*****u 的大作中提到】 : 如果我有一个矩阵M : 现在要把其中一些元素设为1 : 这些元素的坐标在一个n*2的矩阵里 : 比如[1 1; 3 5; 4 5] 也就是说M(1,1),M(3,5), M(4,5)需要设为1 : 在matlab里怎么弄最有效呢? : 我知道可以用for loop,但最好避免
| l********a 发帖数: 1154 | 4 如果行列坐标矩阵是N,那么这样就行了
M(sub2ind(size(M),N(:,1),N(:,2))) = 1; % 这样就可以修改数据
分解开就是:
[m,n] = size(M); % 得到M的尺寸
idx = sub2ind([m,n],N(:,1),N(:,2)); % 转换二维坐标到一维
M(idx) = 1; % 修改数据 | c****p 发帖数: 6474 | 5 subs = [1 1; 3 5; 4 5;];
M(sub2ind(size(M),subs(:,1), subs(:,2))) = 1;
【在 d*****u 的大作中提到】 : 如果我有一个矩阵M : 现在要把其中一些元素设为1 : 这些元素的坐标在一个n*2的矩阵里 : 比如[1 1; 3 5; 4 5] 也就是说M(1,1),M(3,5), M(4,5)需要设为1 : 在matlab里怎么弄最有效呢? : 我知道可以用for loop,但最好避免
|
|