I am taking a course on Fuzzy Systems and I take my notes on my computer. This means that I have to draw graphs on my computer from time to time. Since these graphs are quite well defined, I feel that plotting them with numpy
would be a good idea (I take notes with LaTeX, and I'm pretty quick on the python shell, so I figure I can get away with this).
The graphs for fuzzy membership functions are highly piecewise, for example:
In order to plot this, I tried the following code for a numpy.piecewise
(which gives me a cryptic error):
In [295]: a = np.arange(0,5,1)
In [296]: condlist = [[b<=a<b+0.25, b+0.25<=a<b+0.75, b+0.75<=a<b+1] for b in range(3)]
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-296-a951e2682357> in <module>()
----> 1 condlist = [[b<=a<b+0.25, b+0.25<=a<b+0.75, b+0.75<=a<b+1] for b in range(3)]
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
In [297]: funclist = list(itertools.chain([lambda x:-4*x+1, lambda x: 0, lambda x:4*x+1]*3))
In [298]: np.piecewise(a, condlist, funclist)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-298-41168765ae55> in <module>()
----> 1 np.piecewise(a, condlist, funclist)
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/numpy/lib/function_base.pyc in piecewise(x, condlist, funclist, *args, **kw)
688 if (n != n2):
689 raise ValueError(
--> 690 "function list and condition list must be the same")
691 zerod = False
692 # This is a hack to work around problems with NumPy's
ValueError: function list and condition list must be the same
At this point, I'm fairly confused as to how to plot this function. I don't really understand the error message, which is further impeding my efforts to debug this.
Ultimately, I am looking to plot and export this function into an EPS file, so I'd appreciate any help along those lines as well.
b <= a < b + 0.25
must be written as(b <= a) & (a < b + 0.25)
. – Rameriz