【问题标题】:ValueError: objects are not alignedValueError:对象未对齐
【发布时间】:2015-10-10 01:13:28
【问题描述】:

为什么会有这段代码

def fun(t1,t):
    v = np.array([t,t1])
    M = np.matrix([[0,0],[0,0]])
    a = np.dot(scipy.linalg.expm(M, q=0),v)
    return a[0] 
x =  np.linspace(0,10,201)
y = np.linspace(10,0,201)
X,Y = np.meshgrid(x, y) 
im = pl.imshow(fun(X,Y),cmap=cm.RdBu)
show()

给我错误“ValueError:对象未对齐”? 我试图将我的向量写为v= np.array([[t],[t1]]),但这也无济于事。我做错了什么?

谢谢!

【问题讨论】:

  • 您在哪一行收到此错误?
  • 告诉我们这条线,以及违规对象的形状。
  • 错误出现在a = np.dot(sp.linalg.expm(M, q=0),v) ValueError 行:形状 (2,2) 和 (2,201,201) 未对齐:2 (dim 1) != 201 (dim 1)
  • np.dot 使用第一个参数的最后一个暗角,以及第二个参数的第二个到最后一个

标签: python numpy


【解决方案1】:

为了克服这个错误,我将代码重写为:

def corrm(t1,t):
   v = np.array([t1,t])
   M = np.matrix([[0,0],[0,0]])
   a = np.dot(sw.expm(M, q=0),v) 
   return a[0]

points = 50
k = []
x = np.linspace(-3.0,3.0,points)
y = np.linspace(-3.0,3.0,points)
for i in x:
    for j in y:
        k.append([corrm(i,j)])
k = np.reshape(k,(points,points))
X,Y = meshgrid(x, y) # grid of point
imshow(k,cmap=cm.RdBu)

show()

现在可以了! 谢谢大家的帮助。

【讨论】:

    【解决方案2】:

    看起来像这里

    a = np.dot(scipy.linalg.expm(M1, q=0),v)
    

    您试图在两个大小不兼容的数组之间进行点积。
    在这行之前

    a = np.dot(scipy.linalg.expm(M1, q=0),v)
    

    变量v 有大小

    v.shape
    Out[16]: (2, 201, 201)
    

    矩阵M

    M.shape
    Out[18]: (2, 2)
    

    另外,您在np.dot 行中使用了未定义的变量M1

    【讨论】:

    • 谢谢,M1 确实应该是 M。如何定义我的向量,使其只是 (2,1)?
    • @Odile Smits所以我可以回答你的问题请告诉我你想做什么在这行x = np.linspace(0,10,201) y = np.linspace(10,0,201) X,Y = np.meshgrid(x, y)?
    • 我刚刚定义了一个网格操作点。也可以是:x = arange(-3.0,3.0,0.1), y = arange(-3.0,3.0,0.1) 感谢您的帮助!
    • @Odile Smits 您希望将点矩阵乘以矩阵得到什么结果?
    • 这是我实际想要计算的简化函数。我的函数看起来像这样:W = e^{M*t} . v(tau,t) 其中 M 是与时间无关的矩阵,向量 v 取决于两个变量。所以我希望从指数和向量 v 的点积中得到一个向量 W。这个向量 W(tau,t) 的第一个分量是我想要绘制的二维图。
    猜你喜欢
    • 2012-11-01
    • 2016-05-04
    • 2022-12-07
    • 2014-03-22
    • 2019-06-03
    • 2018-03-06
    • 2020-02-19
    • 1970-01-01
    相关资源
    最近更新 更多