python,将三角形函数绘制成二维数组
我是python新手,在本例中,我想将我的函数放入2d数组中,以便绘制函数。这是我的三角形函数,我将其用于模糊逻辑:python,将三角形函数绘制成二维数组,python,arrays,numpy,triangular,Python,Arrays,Numpy,Triangular,我是python新手,在本例中,我想将我的函数放入2d数组中,以便绘制函数。这是我的三角形函数,我将其用于模糊逻辑: def triangle (z,a,b,c): if (z<=a) | (z>=c): y = 0 elif (a<=z) & (z<=b): y = (z-a) / (b-a) elif (b<=z) & (z<=c): y = (b-z) / (c-b)
def triangle (z,a,b,c):
if (z<=a) | (z>=c):
y = 0
elif (a<=z) & (z<=b):
y = (z-a) / (b-a)
elif (b<=z) & (z<=c):
y = (b-z) / (c-b)
return y
def三角形(z、a、b、c):
如果(z=c):
y=0
elif(a看起来像
a,b,c
是常数,z
是np.linspace
介于a
和c
之间
你可以利用
您正在尝试使用linspace转换哪个数组?尝试转换时会出现什么错误?请显示一个示例输入-
z,a,b,c
;以及所需的输出。您指的是什么?请检查,可能a是z是a和c之间的值,类似于模糊逻辑中的清晰值,因此我将尝试您的代码,感谢helping@AzizAlto-你会如何在OP函数中使用numpt.triu?如果我得到2个函数三角形和梯形,我想把它画成一个图,当然x轴的长度不受c值的限制,例如:x轴的长度是20,三角形和梯形函数有自己的a,b,c,怎么做?就像模糊l一样逻辑隶属函数graph@prasta-如果希望z
具有更大的范围,则在生成z
时更改开始和停止参数。您需要通过调整三角形函数来编写梯形函数。@prasta-只需将适当的参数传递给函数。您也可以从,创建函数>三角形
和梯形,具有固定的a、b、c
参数。您可以使用不同的a、b、c
值创建所需的任意多个部分函数,只需将z
传递给部分函数。因此,我尝试将start和stop函数从numpy.linspace更改为np.linspace(0,20,num=51),然后我不能让我的三角形有1.0的值,它只有到0.9才有。它不能到达三角形的顶部graph@prasta,linspace将在start
和stop
之间为您提供num
等间距点,因此不能保证获得等于b
的值。如果将num
设置得足够大,则应该获得足够接近b
的分数,或者可以使用开始值和停止值。您了解函数的工作原理吗?您应该花一些时间阅读numpy文档,并使用linspace和布尔索引来了解它的工作原理,然后您可以调整代码以满足您的需要。
a = 1
b = 2
c = 3
def triangle (z, a = a, b = b, c = c):
y = np.zeros(z.shape)
y[z <= a] = 0
y[z >= c] = 0
first_half = np.logical_and(a < z, z <= b)
y[first_half] = (z[first_half]-a) / (b-a)
second_half = np.logical_and(b < z, z < c)
y[second_half] = (c-z[second_half]) / (c-b)
return y
z = np.linspace(a, c, num = 51)
y = triangle(z, a, b, c)
q = np.vstack((z, y)) # shape = (2, 50) ... [[z, z, z, ...], [y, y, y, ...]]
q = q.T # shape = (50, 2) ... [[z, y], [z, y], ....]
>>> q = np.linspace(0, 20, num = 50)
>>> print(q)
[ 0. 0.40816327 0.81632653 1.2244898 1.63265306
2.04081633 2.44897959 2.85714286 3.26530612 3.67346939
4.08163265 4.48979592 4.89795918 5.30612245 5.71428571
6.12244898 6.53061224 6.93877551 7.34693878 7.75510204
8.16326531 8.57142857 8.97959184 9.3877551 9.79591837
10.20408163 10.6122449 11.02040816 11.42857143 11.83673469
12.24489796 12.65306122 13.06122449 13.46938776 13.87755102
14.28571429 14.69387755 15.10204082 15.51020408 15.91836735
16.32653061 16.73469388 17.14285714 17.55102041 17.95918367
18.36734694 18.7755102 19.18367347 19.59183673 20. ]
>>> print(q < 5)
[ True True True True True True True True True True True True
True False False False False False False False False False False False
False False False False False False False False False False False False
False False False False False False False False False False False False
False False]
>>> print(q > 15)
[False False False False False False False False False False False False
False False False False False False False False False False False False
False False False False False False False False False False False False
False True True True True True True True True True True True
True True]
>>> print(np.logical_and(q > 5, q < 15))
[False False False False False False False False False False False False
False True True True True True True True True True True True
True True True True True True True True True True True True
True False False False False False False False False False False False
False False]
>>>
>>> q[np.logical_and(q > 7, q < 11)]
array([ 7.34693878, 7.75510204, 8.16326531, 8.57142857,
8.97959184, 9.3877551 , 9.79591837, 10.20408163, 10.6122449 ])
>>>
>>> q[np.logical_and(q > 7, q < 11)] = -1
>>> print(q)
[ 0. 0.40816327 0.81632653 1.2244898 1.63265306
2.04081633 2.44897959 2.85714286 3.26530612 3.67346939
4.08163265 4.48979592 4.89795918 5.30612245 5.71428571
6.12244898 6.53061224 6.93877551 -1. -1. -1. -1.
-1. -1. -1. -1. -1. 11.02040816
11.42857143 11.83673469 12.24489796 12.65306122 13.06122449
13.46938776 13.87755102 14.28571429 14.69387755 15.10204082
15.51020408 15.91836735 16.32653061 16.73469388 17.14285714
17.55102041 17.95918367 18.36734694 18.7755102 19.18367347
19.59183673 20. ]
>>>