ValueError:操作数无法与形状(400,)(2,)一起广播

时间:2015-03-19 12:45:45

标签: python-2.7 numpy callable

由于某些原因,我在获取模块对象时此代码无法调用错误......我真的不明白为什么?

def func (t,a,x):
return
`plt.plot(t,(exp(a*t))*x(), label="lalala")` 

....和追溯

plt.plot(t,(exp(a*t))*x(), label="lalala") TypeError: 'numpy.ndarray' object is not callable

将x()更改为x

x=np.array([1,100])
t=np.linspace(1,10,400)
def func (t,a,x):
    return plt.plot(t,(exp(a*t))*x, label="lalala")

现在我明白了:

ValueError:操作数无法与形状(400,)(2,)

一起广播

目标是使用函数绘制图形:

exp(a*t)*x t...=>y= exp(a*t)*x

y轴上的

,t是x轴。

a是洞时间常数,t(1,10,400)x(1,100)更改。

1 个答案:

答案 0 :(得分:0)

确定您之后的内容有点难以理解,但根据您的修改,您似乎有两个x值,您想要绘制y = x.exp的图表(at)超过t=np.linspace(1,10,400)的时间范围。在这种情况下:

import numpy as np
import matplotlib.pyplot as plt
a = 2
x = np.array([1,100])
t=np.linspace(1,10,400)
def func(t, a, z):
    return z * np.exp(a * t)

plt.plot(t,func(t, a, x[0]))
plt.plot(t,func(t, a, x[1]))

您收到错误是因为x是两个值的数组,而NumPy没有(没有一些帮助)知道如何"广播"与时间数组相关的这两个值。如果您希望func生成一个形状(2,400)的数组以响应输入x,请使用np.newaxisx数组中创建缺少的第二个轴:

func(t, a, x[:,np.newaxis])