Skip to main content
 首页 » 编程设计

python之有没有办法在 NumPy 中使数组条目成为复杂变量

2025年05月04日37落叶无声

我在 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 类型的,其中 i 被解释为 1 的虚根而不是变量。我可以编写定义我自己的函数的代码,但是有一种干净的方法吗?

请您参考如下方法:

看这里: 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 接口(interface)将所有内容传递给较低级别​​的 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