【问题标题】:ValueError: operands could not be broadcast together with shapes (400,) (2,)ValueError:操作数无法与形状一起广播 (400,) (2,)
【发布时间】:2015-05-22 14:09:30
【问题描述】:

由于某种原因,我在此代码上收到模块对象不可调用错误...我真的不明白为什么?

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) 会发生变化。

【问题讨论】:

  • 请告诉我们exp(a*t)x()是什么
  • 请使用您最近的错误消息(而不是将其放在答案中)的信息编辑您的问题,并提供一些有关您正在尝试做什么的信息。
  • ...所以1到10(含)之间有400个时间点。您有两个不同的 x 值感兴趣吗?

标签: python-2.7 numpy callable


【解决方案1】:

很难确定你在追求什么,但从你的编辑看来,你有两个 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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-09
    • 2012-10-31
    • 2013-04-07
    • 2012-08-05
    • 2018-08-18
    • 2020-06-20
    • 2014-08-24
    • 2018-12-26
    相关资源
    最近更新 更多