我有以下功能:
b = [-1 1];
m = b(randi(length(b),1,nsimul*n));
有没有办法对每个n个元素求和并存储在另一个向量中?
示例:
b = [-1 1];
m = b(randi(length(b),1,5*2));
m
m =
1 -1 1 -1 1 -1 -1 1 1 -1
A(1) = m(1) + m(2);
A(2) = m(3) + m(4);
A(3) = m(5) + m(6);
A(4) = m(7) + m(8);
A(5) = m(9) + m(10);
A
A =
0 0 0 0 0
答案 0 :(得分:1)
您可以使用vec2mat
将矢量重塑为适合您想要求和的元素数量的维度矩阵,并且您只需要将正确的维度相加。
vec2mat
很好,因为如果您选择与NxM矩阵不相称的元素数,它会用0填充一维向量的提醒,例如:
<UserControl.Resources>
更一般地说,让我们调用vec2mat(m,2)
ans =
1 -1
1 -1
1 -1
-1 1
1 -1
你想要求和的元素数量,然后:
n_elements
但是如果1D向量和元素数量总是相称并且不需要填充,则可以使用旧的 n_elements=2;
a=sum(vec2mat(m,n_elements),2)
,如下面的评论所述......
答案 1 :(得分:0)
以下代码段应该提供您要查找的内容:
% Define the parameters...
nsimul = 5;
n = 2;
b = [-1 1];
% Compute the final result...
m = b(randi(length(b),1,nsimul*n));
k = sum(reshape(m,n,[]).',2);
例如,给出了矢量:
m = [-1 -1 1 1 -1 -1 -1 1 1 1]
最终结果s
将是:
s = [-2 2 -2 0 2]
,reshape函数给出的中间结果k
等于:
k = [
-1 -1
1 1
-1 -1
-1 1
1 1
]