如何计算两列的点积(将全列视为向量)?

时间:2014-04-03 12:06:29

标签: org-mode

给出了这张表:

| a | b |  c | 
|---+---+----+
| 3 | 4 |    |
| 1 | 2 |    |
| 1 | 3 |    |
| 2 | 2 |    |

我想得到两列a和b的点积,结果应该是(3 * 4)+(1 * 2)+(1 * 3)+(2 * 2),即21。

我不想使用笨拙的公式(B1*B2+C1*C2+D1*D2+E1*E2),因为实际上我有一张大桌等着来计算。

我知道emacs的Calc工具有一个" vprod"可以做那些事情的功能,但我不会'知道如何将整列转换为矢量。

任何人都可以告诉我如何完成这项任务,欣赏它!

2 个答案:

答案 0 :(得分:3)

在emacs-calc中,2个向量的简单乘积计算点积。

这有效(我把结果放在@6$3中;也可以省略括号):

| a | b | c  |
|---+---+----|
| 3 | 4 |    |
| 1 | 2 |    |
| 1 | 3 |    |
| 2 | 2 |    |
|---+---+----|
|   |   | 21 |
#+TBLFM: @6$3=(@I$1..@II$1)*(@I$2..@II$2)

@I@II从第1个小时延伸到第2个小时。

答案 1 :(得分:0)

这可以使用org-mode中的babelR来解决:

#+name: mytable
| a | b |  c | 
|---+---+----+
| 3 | 4 |    |
| 1 | 2 |    |
| 1 | 3 |    |
| 3 | 2 |    |


#+begin_src R :var mytable=mytable
sum(mytable$a * mytable$b)
#+end_src

#+RESULTS:
: 23