【问题标题】:Sum each n elements and store in another vector matlab对每个 n 元素求和并存储在另一个向量 matlab 中
【发布时间】:2018-04-04 18:36:37
【问题描述】:

我有以下功能:

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

【问题讨论】:

  • 只是重塑和总结正确的维度

标签: matlab vector sum


【解决方案1】:

您可以使用vec2mat 将您的向量重塑为一个维度矩阵,该矩阵的维度适合您想要求和的元素数量,并且您只需对正确的维度求和。
vec2mat 很好因为它会用零填充一维向量的提示,以防您选择与 NxM 矩阵不相称的元素,例如:

vec2mat(m,2)

ans =

 1    -1
 1    -1
 1    -1
-1     1
 1    -1

更一般地说,让我们调用n_elements 你想要求和的元素数,然后:

 n_elements=2;
 a=sum(vec2mat(m,n_elements),2)

但是如果一维向量和元素的数量总是相称并且不需要填充,您可以使用旧的 reshape,如下面的 cmets 中所述...

【讨论】:

  • 似乎效率低下,vec2mat 按行写入数据,这意味着它需要复制它。 reshape 会做同样的事情,但不复制数据:sum(reshape(m,n_elements,[]))(假设不需要填充)。
  • 填充是使用它的全部要点。而且这个问题并没有要求效率。
  • 这正是我要找的,谢谢大家的帮助!
【解决方案2】:

以下代码 sn-p 应该提供您要查找的内容:

% 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]

kreshape 函数给出的中间结果等于:

k = [
 -1  -1
  1   1
 -1  -1
 -1   1
  1   1
]

【讨论】:

  • 这正是我要找的,谢谢大家的帮助!
  • 不客气。如果此实现解决了您的问题,请考虑将其标记为已接受。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
相关资源
最近更新 更多