【发布时间】:2017-01-12 01:48:38
【问题描述】:
我想计算矩阵的下一个n 相邻元素的乘积。要相乘的元素数量n 应该在函数的输入中给出。
例如对于这个输入,我应该计算每 3 个连续元素的乘积,从第一个开始。
[p, ind] = max_product([1 2 2 1 3 1],3);
这给出了[1*2*2, 2*2*1, 2*1*3, 1*3*1] = [4,4,6,3]。
有什么实用的方法吗?现在我这样做:
for ii = 1:(length(v)-2)
p = prod(v(ii:ii+n-1));
end
其中v 是输入向量,n 是要相乘的元素数。
在此示例中为 n=3,但可以采用任何正整数值。
根据n 是奇数还是偶数或length(v) 是奇数还是偶数,我有时会得到正确答案,但有时会出错。
例如参数:
v = [1.35912281237829 -0.958120385352704 -0.553335935098461 1.44601450110386 1.43760259196739 0.0266423803393867 0.417039432979809 1.14033971399183 -0.418125096873537 -1.99362640306847 -0.589833539347417 -0.218969651537063 1.49863539349242 0.338844452879616 1.34169199365703 0.181185490389383 0.102817336496793 0.104835620599133 -2.70026800170358 1.46129128974515 0.64413523430416 0.921962619821458 0.568712984110933]
n = 7
我得到错误:
Index exceeds matrix dimensions.
Error in max_product (line 6)
p = prod(v(ii:ii+n-1));
有没有正确的通用方法?
【问题讨论】:
-
我怀疑你没有得到错误的答案,你得到一个 index out of bounds 错误,对吗?
-
对,我得到索引超出矩阵维度。 max_product 中的错误(第 6 行) p=prod(v(ii:ii+n-1));
-
这是因为
ii的范围限制不正确。提示:当ii处于最大值时,ii+n-1应该为您提供v的最后一个元素。 -
@beaker 并没有真正的帮助。我在 ii 达到最大值之前很久就得到了错误。如果 ii=1:15,我已经从第 10 次迭代中得到错误。没错,我的问题是如何组织 ii 的范围。让它依赖于 length(v) 是错误的,试图找出 n 为奇数或偶数的情况也是错误的。
-
您的代码中只有一个错误。您应该将 for 循环的开头更改为
for ii = 1:(length(v)-n+1),然后它应该可以工作。
标签: arrays matlab matrix multiplication sliding-window