首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Ruby中,将两个数组相乘并得到相乘后的值之和的有效方法是什么?

在Ruby中,将两个数组相乘并得到相乘后的值之和的有效方法是什么?
EN

Stack Overflow用户
提问于 2011-09-10 22:47:52
回答 8查看 10.1K关注 0票数 7

在Ruby中,将两个数组相乘并得到相乘的值之和的有效方法是什么?我在Ruby中有两个数组:

代码语言:javascript
复制
array_A = [1, 2, 1, 4, 5, 3, 2, 6, 5, 8, 9]
array_B = [3, 2, 4, 2, 5, 1, 3, 3, 7, 5, 4]

我的目标是得到array_A * array_B的和值,即1*3 + 2*2 + 1*4 + ... + 8*5 + 9*4。

因为我需要在我的应用程序中计算它们数百万次,那么进行这种计算最有效的方法是什么?

这就像一个矩阵计算: 1* N矩阵* N*1矩阵或向量点积。

EN

回答 8

Stack Overflow用户

发布于 2011-09-10 23:26:08

遍历每个元素应该是必须的

代码语言:javascript
复制
(0...array_A.count).inject(0) {|r, i| r + array_A[i]*array_B[i]}
票数 7
EN

Stack Overflow用户

发布于 2011-09-10 23:05:14

我将从简单的开始,使用Ruby矩阵类:

代码语言:javascript
复制
require 'matrix'

a = Matrix.row_vector( [1, 2, 1, 4, 5, 3, 2, 6, 5, 8, 9])
b = Matrix.column_vector([3, 2, 4, 2, 5, 1, 3, 3, 7, 5, 4])

result= a * b
puts result.element(0,0)

如果这被证明太慢,那么使用外部数学库执行完全相同的方法。

票数 3
EN

Stack Overflow用户

发布于 2011-09-10 23:45:40

这就是我要做的

代码语言:javascript
复制
array_A.zip(array_B).map{|i,j| i*j }.inject(:+)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7372489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档