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

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

-- 没有设置全局键:
local alg  = require "sci.alg"  -- 加载 sci.alg 模块。
local dist = require "sci.dist" -- 加载 sci.dist 模块。

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) -- 矩阵转置、相乘和求幂。
      w[i] = alg.trace((Q[]`**Q[])^^4) -- 矩阵转置、相乘和求幂。
  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) -- 矩阵转置、相乘和求幂。
      w[i] = alg.trace((Q[]`**Q[])^^4) -- 矩阵转置、相乘和求幂。
  end
  return sqrt(stat.var(v))/stat.mean(v), sqrt(stat.var(w))/stat.mean(w)
end

print(randmatstat(1000))

其中的预期输出为:

0.75865001347735    0.74932678346271
[用时 0.2 秒]
点赞
用户349351
用户349351

SciLua 作者在此

为了启用 SciLua 语言扩展,除了 sci 包之外,还需要安装 sci-lang 包。

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

否则,如果你选择手动安装 scisci-lang,并将其安装在现有的 LuaJIT 安装顶部,则会应用以下方法。该软件包包含一个 __bin 文件夹,如果通过 upkg 安装(在 ULua 中),则为每个操作系统自动从此文件夹中包含的 lua 文件创建可执行脚本。因此,如果选择手动安装,则必须自己创建可执行脚本(例如,在 Linux 上,创建一个名为 scilua 的文件,具有执行权限,并且其内容为 __bin/scilua.lua + bash shebang)。

2018-02-20 02:02:53