【问题标题】:Issue with unique ( symbolic ) in octave八度音阶中唯一(符号)的问题
【发布时间】:2021-05-26 18:33:44
【问题描述】:

我在 Windows 10 Pro 上使用 Octave 6.2。 以下两个coden-ps不言自明:

syms a b;
 unique([a,b])
 ans = (sym) [a  b]  (1x2 matrix)

这么久,太好了。

但是

unique([a])
error: Python exception: UnboundLocalError: local variable 's' referenced before assignment
occurred at line 1 of the Python code block:
return sp.Matrix([list(uniq(*_ins))]),
error: called from
pycall_sympy__ at line 178 column 7
unique at line 55 column 5

我做了一个丑陋的解决方法,但它当然会减慢计算时间。 有没有人有同样的问题? 有什么建议吗?

【问题讨论】:

  • 在 octave 6.1.1 我在syms a b; 收到一个错误,所以我帮不了你...(我遇到的问题是github.com/cbm755/octsympy/issues/1035
  • 你的丑陋解决方法是什么?如果只是先检查长度,我认为这不会太费力。我还注意到,如果您选择使用finiteset 而不是unique(如help @sym/unique 中所述),则不会遇到同样的问题。
  • 正如我之前所说,请不要在答案框中发布不回答您在此处发布的问题的内容。评论应该放在评论线程中,改进或扩展答案的信息应该直接编辑到问题本身中。问题底部有一个edit 链接,就在标签下方。
  • 其中一位软件包维护者确认这是一个错误:github.com/cbm755/octsympy/issues/1047

标签: unique octave


【解决方案1】:

我的解决方法是以下代码:

function un=mifUnique(rowcol)
  if isempty(rowcol)
    un=[];
  elseif
    ~isvector(rowcol)
    un=mitSetupError("un=mifUnique(rowcol): 'rowcol' has to be a vector.");
  else
    rowcol(end+1)=rowcol(1);
    un=unique(rowcol);
  endif
endfunction

*** 编辑:更简单灵活的是:

function unque=mifUnique(unque)
  if numel(unque) < 2
    return
  else
    unque=unique(unque);
  endif
endfunction

不仅支持向量,还支持任何维度。

*** END_EDIT

直到现在我还不知道函数finiteset。非常感谢! 但是如何在没有 eval 函数的情况下使用有限集来测试符号数组?

finiteset ([a,a,b])
ans = (sym) {[a  a  b]}

fs=finiteset ([a,a,b](:))
fs = (sym)

   [a]
   [ ]
  {[a]}
   [ ]
   [b]

>> typeinfo (fs)
ans = class

这不是我想要的。

编辑:对不起,我应该把关于“finteset”的帮助读到最后

另一方面,如果您想要从 矩阵,首先将其转换为元胞数组: A = [1 x 1; 2 1 x]; 有限集(num2cell(A))。

现在我将测试哪种方法更快。会尽快发布吗?

【讨论】:

  • 另一方面,这可以被认为是一个答案。
  • 嗨,克里斯,我应该标记我的问题已解决吗?如果是,该怎么做?
  • 不,你不应该。我认为这不是您正在寻找的答案。我只是建议这可以被视为一个答案,而不是你发布的其他答案。
  • 你当然是对的。我是新来的,所以我仍然需要学习。感谢您的建议。其他答案已被删除。
猜你喜欢
  • 2011-01-14
  • 2010-10-17
  • 2016-07-21
  • 1970-01-01
  • 2020-12-31
  • 2014-10-10
  • 2014-01-14
  • 2015-04-16
  • 1970-01-01
相关资源
最近更新 更多