【问题标题】:piecewise function with 3d plot具有 3d 绘图的分段函数
【发布时间】:2014-03-15 22:14:57
【问题描述】:

由于广播错误,我无法让 np.piecewise 进行多维绘图。

有没有人有办法解决这个问题?

这是我在简化的可执行脚本中的内容:

import numpy as np
from pylab import *
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d, Axes3D 

num_steps = 100
x_arr = np.linspace(0,100, num_steps)
y_arr = np.linspace(0,20, num_steps)

def zfunc(x, y):
    return np.piecewise(x, [x>=500, x<500], [x, -x])

x,y = np.meshgrid(x_arr, y_arr)
z =zfunc(x,y)

fig=plt.figure()
ax=fig.subplot(1,1,1,projection='3d')
p = x.plot_surface(x,y,z,rstride=1,cstride=1,cmap=cm.coolwarm,linewidth=0,antialiased=False)
plt.show()

这给出了错误:

 return np.piecewise(x, [x>=500, x<500], [x, -x])
  File "C:\Python27\lib\site-packages\numpy\lib\function_base.py", line 716, in piecewise
    y[condlist[k]] = item
ValueError: array is not broadcastable to correct shape

【问题讨论】:

    标签: python numpy piecewise


    【解决方案1】:

    查看您正在使用的函数的文档字符串通常是个好主意。我在那里找到了这个解决方案。

    np.piecewise(x, [x>=500, x<500], [lambda x: x, lambda x: -x])
    

    funclist : 可调用的列表,f(x,args,*kw) 或标量 每个函数都在x 上进行评估,无论其对应 条件为真。它应该将一个数组作为输入并给出一个数组 或标量值作为输出。如果,而不是可调用的, 提供一个标量,然后一个常量函数 (lambda x: scalar) 是 假设。

    【讨论】:

    • 非常感谢!我认为这是处理np.meshgrid 或其他东西的问题,但我应该更多地研究一下。感谢您的帮助,效果很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 2019-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多