由于广播错误,我无法让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
答案 0 :(得分:1)
查看您正在使用的函数的文档字符串通常是个好主意。我在那里找到了解决方案。
np.piecewise(x, [x>=500, x<500], [lambda x: x, lambda x: -x])
funclist:callables列表,f(x, args, * kw)或标量 每个函数都在
x
的任何地方进行评估 条件为真。它应该采用数组作为输入并给出一个数组 或标量值作为输出。如果,而不是可赎回, 提供标量然后是常数函数(lambda x: scalar
) 假设