如何在Matlab中将不同长度的行叠加到矩阵上?也就是说,我希望矩阵A的行z中的前x个元素和最后y个元素为零,其中x和y在长度为Z的两个列向量中指定(因此对应于矩阵的行数)一个) . 我只能想到一个简单循环的解决方案,但我正在寻找一个更优雅的解决方案,避免使用循环,因为这段代码需要在主循环中运行数千次 .
编辑
正如@randomatlabuser所证实的那样,这就是提问者在没有循环的情况下想做的事情:
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
2 回答
你可以这样做:
这个例子的结果是:
如果在主循环的所有迭代中
x
和y
相同,则可以通过在循环之前计算掩码来节省时间:然后在每次迭代时你只需要应用预先计算的掩码:
你想要做的是:
但没有循环,对吗?