有没有办法在NumPy中使数组条目复杂变量?

时间:2015-06-09 05:46:37

标签: python arrays numpy matrix matrix-multiplication

我正在使用Python中的numpy数组。有没有办法将array的条目保留为变量,以便它们遵循适当的矩阵乘法和其他矩阵函数(加法,行列式等)?

例如:

         import numpy as np
         A = np.array([[a, b], [c, d]])
         B = np.array([[e, f], [g, h]])
         C = np.dot(A,B)

         # C should be [ae+bf ag+bh]
         #             [ce+df cg+dh]

另外,由于我的矩阵元素一般很复杂,我想要条目 类型为a+ib的{​​{1}}被解释为1的虚根而不是变量。我可以编写定义我自己的函数的代码,但有一种干净的方法吗?

2 个答案:

答案 0 :(得分:3)

见这里: Complex numbers usage in python

Numpy尊重Python虚数。

>>> a = np.array([i+1j for i in range(3)])
>>> b = np.array([i+2j for i in range(3,6)])
>>> a*b
array([-2.+3.j,  2.+6.j,  8.+9.j])

这也适用于您给出的示例(正如预期的那样):

>>> a
array([[ 1.+1.j,  1.+2.j],
       [ 1.+1.j,  1.+2.j]])
>>> b
array([[ 1.+1.j,  1.+2.j],
   [ 1.+1.j,  1.+2.j]])
>>> np.dot(a,b)
array([[-1.+5.j, -4.+7.j],
       [-1.+5.j, -4.+7.j]])

至于将它们保存为变量,NumPy将所有内容通过它的Python接口传递给较低级别​​的C代码,因此我怀疑您可以将所有内容存储为变量。

但是,您可以编写一个完成此任务的任意函数:

def myfunc(obj):
     A = np.array([[obj['a']], [obj['b']]])
     B = np.array([[obj['c']], [obj['d']]])
     C = np.dot(A,B)
     return C

答案 1 :(得分:2)

使用sympy

from  sympy import *

A=MatrixSymbol('A', 2, 2)
B=MatrixSymbol('B', 2,2)
print Matrix(A)
print  Matrix(A*B)

>>>Matrix([[A[0, 0], A[0, 1]], [A[1, 0], A[1, 1]]])
   Matrix([[A[0, 0]*B[0, 0] + A[0, 1]*B[1, 0], A[0, 0]*B[0, 1] + A[0,  1]*B[1, 1]], [A[1, 0]*B[0, 0] + A[1, 1]*B[1, 0], A[1, 0]*B[0, 1] + A[1, 1]*B[1, 1]]])