在表达式中使所有符号可交换

时间:2018-01-16 23:02:09

标签: python sympy commutativity

假设您在一个表情符号表达式中有许多非交换符号,例如

sympy.simplify(allcommutative(expr)) = c * (a + b)

使表达式中的所有符号都可交换的首选方法是什么,例如,.data

this answer中,声明在创建后没有替换符号的情况下无法改变符号的交换性,但也许有一种简单的方法可以在块中更改像这样的表达式的所有符号?

2 个答案:

答案 0 :(得分:5)

如果您希望Eq(expr, c * (a + b))评估为True,则需要使用其他通勤符号替换符号。例如:

replacements = {s: sympy.Dummy(s.name) for s in expr.free_symbols}
sympy.Eq(expr, c * (a + b)).xreplace(replacements).simplify()

返回True。

答案 1 :(得分:3)

两条评论:

  1. 非交换会因素(尽管他们尊重nc expr出现的那一方)
  2. 虽然你有一个强有力的答案,一个通常足够好的简单答案就是只是表达表达式的字符串版本
  3. 两者都显示如下:

    char data[] = {-1, -2, 8, 4};
    cv::Mat m = cv::Mat(2, 2, CV_8SC1, data);
    
    m.convertTo(m, CV_8UC1);
    
    >>>  0, 0, 8, 4,