Nar*_*ewe 2 python numpy sympy
我想对这样的 numpy 数组做一些求和
import numpy as np
import sympy as sy
import cv2
i, j = sy.symbols('i j', Integer=True)
#next read some grayscale image to create a numpy array of pixels
a = cv2.imread(filename)
b = sy.summation(sy.summation(a[i][j], (i,0,1)), (j,0,1)) #double summation
Run Code Online (Sandbox Code Playgroud)
但我正面临一个错误。是否可以将 numpy 符号作为 numpy 数组的索引处理?如果不是,你能给我一个解决方案吗?谢谢。
不能在 SymPy 表达式中直接使用 numpy 对象,因为 numpy 对象不知道如何处理符号变量。
相反,使用 SymPy 对象象征性地创建你想要的东西,然后lambdify它。numpy 数组的 SymPy 版本是 IndexedBase,但它似乎存在错误,因此,由于您的数组是二维的,因此您也可以使用 MatrixSymbol。
In [49]: a = MatrixSymbol('a', 2, 2) # Replace 2, 2 with the size of the array
In [53]: i, j = symbols('i j', integer=True)
In [50]: f = lambdify(a, Sum(a[i, j], (i, 0, 1), (j, 0, 1)))
In [51]: b = numpy.array([[1, 2], [3, 4]])
In [52]: f(b)
Out[52]: 10
Run Code Online (Sandbox Code Playgroud)
(另请注意,创建整数符号的正确语法是symbols('i j', integer=True),而不是symbols('i j', Integer=True))。
请注意,您必须使用a[i, j]代替a[i][j],这是不支持的。