首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matlab:将不同长度的行叠加到矩阵上

Matlab:将不同长度的行叠加到矩阵上
EN

Stack Overflow用户
提问于 2013-11-24 22:04:24
回答 2查看 509关注 0票数 1

如何在Matlab中将不同长度的行叠加到矩阵上?也就是说,我希望矩阵A的z行中的第一个x元素数和最后的y元素数为零,x和y在长度Z的两个列向量中指定(因此对应于矩阵A的行数)。我只能从简单循环的角度考虑解决方案,但我正在寻找一种更优雅的解决方案,避免使用循环,因为这段代码需要在主循环中运行数千次。

编辑

正如@randomatlabuser所证实的那样,这是提问者想要做的没有循环的事情:

代码语言:javascript
运行
复制
M = 1e4; N = 1e3; A = randn(M, N);
x = randi([0, N], [M, 1]);
y = randi([0, N], [M, 1]);
for hh = 1:M
  A(hh, 1:x(hh)) = 0;
  A(hh, (N - y(hh) + 1):N) = 0;
end
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-25 11:30:22

你可以这样做:

代码语言:javascript
运行
复制
A = rand(4,6); %// example data
x = [1; 2; 1; 3]; %// example data
y = [1; 2; 1; 2]; %// example data

[M N] = size(A);
col = 1:N;
B = A.* ( bsxfun(@gt, col, x) & bsxfun(@le, col, (N-y)) );

本例的结果是:

代码语言:javascript
运行
复制
>> A

A =

    0.0168    0.8797    0.7367    0.9859    0.5385    0.9745
    0.9274    0.4161    0.0567    0.0649    0.7961    0.1616
    0.3935    0.8690    0.8386    0.0308    0.5494    0.5525
    0.7615    0.1895    0.0002    0.0919    0.7167    0.6101

>> B

B =

         0    0.8797    0.7367    0.9859    0.5385         0
         0         0    0.0567    0.0649         0         0
         0    0.8690    0.8386    0.0308    0.5494         0
         0         0         0    0.0919         0         0

如果xy在主循环的所有迭代中相同,则可以通过在循环之前计算掩码来节省时间:

代码语言:javascript
运行
复制
[M N] = size(A);
col = 1:N;
mask = bsxfun(@gt, col, x) & bsxfun(@le, col, (N-y));

然后,在每次迭代时,只需应用预先计算的掩码:

代码语言:javascript
运行
复制
B = A.*mask;
票数 1
EN

Stack Overflow用户

发布于 2013-11-24 23:55:04

你想做的是:

代码语言:javascript
运行
复制
M = 1e4; N = 1e3; A = randn(M, N);
x = randi([0, N], [M, 1]);
y = randi([0, N], [M, 1]);
for hh = 1:M
  A(hh, 1:x(hh)) = 0;
  A(hh, (N - y(hh) + 1):N) = 0;
end

但没有循环,对吧?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20181653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档