SciLua:附近的意外符号']'

时间:2017-12-29 19:36:25

标签: matrix lua

SciLua页面运行以下示例(我的测试文件名为test.lua):

-- No global key is set:
local alg  = require "sci.alg"  -- Load sci.alg module.
local dist = require "sci.dist" -- Load sci.dist module.


local function randmatstat(t)
  local n = 5
  local v, w = alg.vec(t), alg.vec(t)
  for i=1,t do
      local a, b, c, d = randn(n, n), randn(n, n), randn(n, n), randn(n, n)
      local P = alg.join(a..b..c..d)
      local Q = alg.join(a..b, c..d)
      v[i] = alg.trace((P[]`**P[])^^4) -- Matrix transpose, product and power.
      w[i] = alg.trace((Q[]`**Q[])^^4) -- Matrix transpose, product and power.
  end
  return sqrt(stat.var(v))/stat.mean(v), sqrt(stat.var(w))/stat.mean(w)
end

我一直收到错误:

  

test.lua:13:']'

附近的意外符号

大多数其他模块工作正常,但只有在使用矩阵时才会出现问题。我感谢您的帮助。

更新

在@stepelu的有用回答中,我非常感谢他,以下完整的例子现在可以正常工作:

local alg     = require 'sci.alg'
local prng    = require 'sci.prng'
local stat    = require 'sci.stat'
local dist    = require 'sci.dist'

local min, sqrt, random, abs = math.min, math.sqrt, math.random, math.abs
local rng = prng.std()
local vec, mat, join = alg.vec, alg.mat, alg.join

local function randn(r, c)
    local x = mat(r, c)
    for i=1,#x do 
        x[i] = dist.normal(0, 1):sample(rng) 
    end
    return x
end

local function randmatstat(t)
  local n = 5
  local v, w = alg.vec(t), alg.vec(t)
  for i=1,t do
      local a, b, c, d = randn(n, n), randn(n, n), randn(n, n), randn(n, n)
      local P = alg.join(a..b..c..d)
      local Q = alg.join(a..b, c..d)
      v[i] = alg.trace((P[]`**P[])^^4) -- Matrix transpose, product and power.
      w[i] = alg.trace((Q[]`**Q[])^^4) -- Matrix transpose, product and power.
  end
  return sqrt(stat.var(v))/stat.mean(v), sqrt(stat.var(w))/stat.mean(w)
end

print(randmatstat(1000))

预期输出:

0.75865001347735    0.74932678346271
[Finished in 0.2s]

1 个答案:

答案 0 :(得分:2)

SciLua的作者。

为了启用SciLua语言扩展,必须在sci-lang之外另外安装sci包。

如果您将SciLua作为ulil发行版的一部分安装,如scilua.org(首选方法)所示,则只需通过scilua可执行文件而不是lua执行脚本即可。

否则,如果您选择在现有LuaJIT安装的顶部手动安装scisci-lag,则以下情况适用。 该软件包包含一个__bin文件夹,当通过upkg安装(在ULua中)时,每个操作系统的可执行脚本将自动从该文件夹中包含的lua文件创建。 因此,如果您选择手动安装,则必须自行创建可执行脚本(例如,在Linux上使用exec权限命名为scilua的文件,内容为__bin/scilua.lua + bash shebang)