看起来a, b, c是常量,z是a和{}之间的np.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], ....]
在比较表达式中使用numpy-ndarray时,结果是一个布尔数组:
^{pr2}$
您可以使用布尔数组来选择数组中满足您条件的部分:>>> 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 ])
>>>
在赋值语句中使用布尔索引时,右侧的只分配给比较为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. ]
>>>