【问题标题】:Input z must be 2D, not 0D in python输入z必须是2D,而不是python中的0D
【发布时间】:2021-01-25 22:17:28
【问题描述】:

所以我试图绘制这个函数的轮廓。代码如下:

#base packages
#import sympy as sp
#from sympy import *
import numpy as np 
import matplotlib.pyplot as plt
from sklearn.linear_model import LogisticRegression


x = np.reshape(np.array([0,0,0,0.1,0.1,0.3,0.3,0.9,0.9,0.9]),(-1,1))
y = np.array([0.,0.,1.,0.,1.,1.,1.,0.,1.,1.])

def f(b0,b1,x,y):
    vec = [y[i]*np.log(1/(1+np.exp(-b0-b1*x[i]))) + (1-y[i])*np.log(1 - (1/(1+np.exp(-b0-b1*x[i])))) for i in range(len(y))]
    return np.sum(vec)


b00= np.linspace(-2,2,1000)
b11 = np.linspace(-2,2,1000)
xv, yv = np.meshgrid(b00,b11)


contours = plt.contour(x, y, f(xv,yv,x,y), 3, colors='black')
plt.clabel(contours, inline=True, fontsize=8)

plt.imshow(f(xv,yv,x,y), extent=[-10,10, -10, 10], origin='lower',
           cmap='RdGy', alpha=0.5)
plt.colorbar()


但是,我得到了这个错误:

Input z must be 2D, not 0D

知道我该如何解决吗?谢谢!

【问题讨论】:

  • 您可能应该告诉我们您使用的是什么编程语言!我认为这是 Python,SO 远不是一个纯 Python 的网站!
  • 查看f(xv,yv,x,y) 本身(在调用contour 之前)。确保它生成一个形状像xy 的值数组。即使您将数组传递给它,您也会返回 np.sum(vec),它没有任何轴参数返回一个标量 - 它对 所有 值求和。

标签: python numpy matplotlib plot contour


【解决方案1】:

您的函数 f 正在返回一个数字(0D - 0 维),您将其用作函数的第三个参数,该函数需要一个二维数组,而不是在该位置(可能是 plt.contour,您没有包含 de真正的回溯)。

该函数的源代码调用第三个参数z,因此出现错误消息。

【讨论】:

    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2016-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多