【发布时间】:2019-09-28 21:00:09
【问题描述】:
我有一个大小为 1*92609 的矩阵。我想循环矩阵并一次取 8 个值,以与另一个 8 位大小的矩阵执行元素乘法。要么,我想要做的就是划分矩阵,这样在第一次迭代中只取前 1:8 元素,而在第二次迭代中,取 8:16 元素,依此类推。
【问题讨论】:
我有一个大小为 1*92609 的矩阵。我想循环矩阵并一次取 8 个值,以与另一个 8 位大小的矩阵执行元素乘法。要么,我想要做的就是划分矩阵,这样在第一次迭代中只取前 1:8 元素,而在第二次迭代中,取 8:16 元素,依此类推。
【问题讨论】:
如果你的矩阵是MTX,你可以这样做
N = numel(MTX)
for k = 1:8:N
subMtx = MTX(k:min(k+7,N));
do your processing with subMtx
end
表达式1:8:N 给出了序列1, 9, 17, ...。
min(k+7,N) 是必需的,因为矩阵大小 (92609) 不能被 8 整除。请注意最后一个子矩阵只有一个元素。
HTH
【讨论】:
x 是你的原始数组,你想取每 8 个元素的平均值
n = floor( length(x)/8 ); % how many series of 8 elements in x
y = zeros( 1,n ); % preallocate
k = 0; % counter for y array
for i = 1:8:length(x)-1
k = k + 1;
y(k) = mean( x(i:i+7) ); % take mean of each 8 elements
end
【讨论】:
x(i+7) 可能不存在,请参阅其他答案。
for i = 1:8:length(x)'i'不能大于length(x)-8
for i = 1:8:length(x)-1
8*n。或者循环遍历k=1:n。