【问题标题】:Issues with cmath in 3D plotting using Matplotlib使用 Matplotlib 进行 3D 绘图中的 cmath 问题
【发布时间】:2020-01-27 05:11:48
【问题描述】:

我有这个简单的代码,它试图获取两个复数 E1E2 的实部的 3D 图,作为 tg 的函数。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import cmath


eps=0.5


def ReE1(t,g):
    E1=eps+cmath.sqrt(t**2-g**2)
    return E1.real 

def ReE2(t,g):
    E2=eps-cmath.sqrt(t**2-g**2)
    return E2.real 



fig = plt.figure()
ax = plt.axes(projection="3d")

t = np.linspace(0, 10, 50)
g = np.linspace(0, 10, 50)

X, Y = np.meshgrid(t, g)
Z = ReE1(X, Y)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
                cmap='winter', edgecolor='none')
Z = ReE2(X, Y)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
                cmap='summer', edgecolor='none')
plt.show()

我在使用 Python 3 运行时遇到以下错误。

Traceback (most recent call last):
  File "t2.py", line 28, in <module>
    Z = ReE1(X, Y)
  File "t2.py", line 11, in ReE1
    E1=eps+cmath.sqrt(t**2-g**2)
TypeError: only length-1 arrays can be converted to Python scalars

我们该如何解决?另外,我们可以直接使用复杂函数E1E2(而不是ReE1ReE2)并在绘图时调用real 模块吗?

【问题讨论】:

    标签: python python-3.x matplotlib 3d cmath


    【解决方案1】:

    问题似乎是来自cmathsqrt 只接受标量,而您试图通过提供二维数组来以矢量化方式使用它。一种解决方案是通过如下循环将cmath.sqrt 应用于tg 的每个元素:

    def ReE1(t,g):
        E1 = np.zeros(t.shape, dtype='complex')    
        for i in range(t.shape[0]):
            for j in range(t.shape[1]):
                E1[i][j]=eps+cmath.sqrt(t[i][j]**2-g[i][j]**2)
        return E1.real 
    
    def ReE2(t,g):
        E2 = np.zeros(t.shape, dtype='complex')    
        for i in range(t.shape[0]):
            for j in range(t.shape[1]):
                E2[i][j]=eps-cmath.sqrt(t[i][j]**2-g[i][j]**2)
        return E2.real 
    

    【讨论】:

    • 你能解释一下t.shape[0]t.shape[1]在做什么吗?为什么没有g.shape[0]g.shape[1]?谢谢。
    • @hbaromega [0] 给出二维矩阵的行数,[1] 给出列数。 shape 返回 50x50,因为你有一个网格
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 2016-08-17
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多