计算数组中接下来n个元素的乘积

埃塞姆

我想计算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));

有什么正确的一般方法吗?

走走

更新

这个方便的解决方案受到了Dev-iL精心思考的答案的启发,不需要Matlab R2016a或更高版本

out = real( exp(conv(log(a),ones(1,n),'valid')) )

基本思想是将乘法转换为总和,并且可以使用移动平均值,而移动平均值又可以通过conv合并来实现


旧答案

这是gallery在与元素相乘之前获取循环矩阵并索引所得矩阵的相关部分的一种方法

a = [1 2 2 1 3 1]
n = 3

%// circulant matrix
tmp = gallery('circul', a(:))
%// product of relevant parts of matrix
out = prod(tmp(end-n+1:-1:1, end-n+1:end), 2)

out =

     4
     4
     6
     3

在输入中没有零的情况下,内存效率更高的替代方案

a = [10 9 8 7 6 5 4 3 2 1]
n = 2

%// cumulative product
x = [1 cumprod(a)] 
%// shifted by n and divided by itself
y = circshift( x,[0 -n] )./x 
%// remove last elements 
out = y(1:end-n) 

out =

    90    72    56    42    30    20    12     6     2

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

python将每个索引处的数组中的所有接下来的n个值相加

来自分类Dev

如何计算熊猫中接下来的行数

来自分类Dev

在接下来的 m 个月内生成 n 个约会

来自分类Dev

dplyr抑制组中接下来出现的n个值

来自分类Dev

测量数据帧中接下来N行的偏差

来自分类Dev

接下来在Ruby中什么无效?

来自分类Dev

选择元素将在接下来的2个月内显示。SQL服务器

来自分类Dev

javascript将类添加到接下来的7个元素

来自分类Dev

如果正则表达式存储在数组中,则Perl接下来

来自分类Dev

实时数据库:接下来的N个事件

来自分类Dev

如何在ng-repeat中显示接下来的15个项目?

来自分类Dev

如何使用 JavaScript 的 for 循环从对象中获取接下来的 3 个项目?

来自分类Dev

MySQL查询从表中返回接下来的三个事件

来自分类Dev

获取一周中接下来 n 天的列表?

来自分类Dev

将接下来的 30 天放入数组

来自分类Dev

如何计算数组的乘积?

来自分类Dev

接下来 n 行的更复杂的滚动总和

来自分类Dev

数据帧中接下来的x行的频率

来自分类Dev

如何在Android中获得接下来的7天?

来自分类Dev

在jQuery ui datepicker中禁用接下来的10天

来自分类Dev

对 python 中接下来的 10 次使用相同的值

来自分类Dev

如何基于另一列计算接下来的n行的平均值-SQL(Oracle)

来自分类Dev

根据接下来的四个滑块中的值更新第一个滑块

来自分类Dev

根据接下来的四个滑块中的值更新第一个滑块

来自分类Dev

正则表达式:如何在接下来的五个字中向前/向后看?

来自分类Dev

计算数组中 n 个事件的联合概率

来自分类Dev

计算数组中的不同元素

来自分类Dev

计算数组中的元素数

来自分类Dev

计算数组中的元素数

Related 相关文章

热门标签

归档