Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python,将三角形函数绘制成二维数组_Python_Arrays_Numpy_Triangular - Fatal编程技术网

python,将三角形函数绘制成二维数组

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)

我是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)
    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.        ]
>>>