gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:39:05 25 4
gpt4 key购买 nike

我是Python新手,在这种情况下,我想将我的函数放入二维数组中,这样我就可以绘制函数。这是我的三角形函数,我将其用于模糊逻辑:

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

我正在尝试使用 numpy 制作数组,np.linspace 但我无法完成它,我尝试过使用模糊库,但没有任何效果。

最佳答案

看起来a, b, c是常量,za之间的np.linspace,和c

您可以使用Boolean Indexing , SciPy cookbook/Indexing

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], ....]

enter image description here

<小时/>

当您在比较表达式中使用 numpy ndarray 时,结果是一个 bool 数组:

>>> 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]
>>>

您可以使用 bool 数组选择数组中满足您的条件的部分:

>>> 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 ])
>>>

当您在赋值语句中使用 bool 索引时,右侧仅分配给比较为True的索引:

>>> 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. ]
>>>

关于python,将三角函数绘制成二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39951392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com