【问题标题】:SciLua: unexpected symbol near ']'SciLua:']'附近的意外符号
【发布时间】:2023-03-18 20:50:01
【问题描述】:

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]

【问题讨论】:

  • 闻起来不喜欢反引号
  • 我看到了反对意见,但这是我学习 Lua 的第一天,可能是我在做一些愚蠢的事情。投反对票的人能否给我一个提示,让我更积极一些?
  • @MarcinOrlowski -- 如页面所述,反引号用于矩阵转置。
  • @MarcinOrlowski -- 我的问题是为什么它不喜欢反引号?为什么无法识别**^^

标签: matrix lua


【解决方案1】:

这里是 SciLua 的作者。

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

如果您将 SciLua 安装为 scilua.org 上所示的 ULua 发行版的一部分(首选方法),那么通过 scilua 可执行文件而不是 lua 执行脚本就足够了。

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

【讨论】:

  • 非常感谢,我被ulua page 命令# On Windows: cd folder_containing_ulua/ulua lua [options] [script [args]] 误导了。现在一切正常。我很感激你,我打算放弃我非常喜欢的 Scilua 的整个想法。
猜你喜欢
  • 2015-09-24
  • 1970-01-01
  • 2022-01-16
  • 2013-01-16
  • 2020-02-21
  • 2019-04-23
  • 2020-09-14
  • 2023-03-27
  • 2012-10-23
相关资源
最近更新 更多