我有一个相对简单的问题。我有一组数据在某个位置有一个峰值。为了更清楚地绘制它,我想将数据乘以峰值。怎么办?作为一个例子,我想将所有值乘以11 <11。 x&lt;图17(其具有y> -0.1)乘以因子2.在我的实际数据中,我具有y值的条件,例如y> Y0
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1, 20, 100)
y = np.sin(x)/x
plt.plot(x,y,'-ob',lw=2,markersize=12)
plt.show()
提前谢谢!
答案 0 :(得分:2)
使用numpy数组,您可以使用二进制掩码。因此x < 11
将创建一个布尔数组,您可以将其用作选择掩码。由于您有多种条件,因此必须使用np.logical_and
:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1, 20, 100)
y = np.sin(x)/x
selection = np.logical_and(x > 11, x < 17, y < 0)
y[selection] = y[selection]*2
plt.plot(x, y, '-ob', lw=2, markersize=12)
plt.show()
答案 1 :(得分:1)
我不确定您要完成的是什么,但您可以使用np.where
选择数组中的特定索引,这些索引对应于条件(即11<x<20
)。
http://docs.scipy.org/doc/numpy/reference/generated/numpy.where.html
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1, 20, 100)
y = np.sin(x)/x
plt.plot(x, y, '-ob', lw=2, markersize=12)
i = np.where( (x>11) & (x<20) & (y>-0.1))
y[i]*=2
plt.plot(x, y, 'g', lw=2)
plt.show()
修改强>
另外,请参阅@hitzg有关直接创建二进制掩码的注释。因此,代码可以缩短为:
y[(x>11) & (x<20) & (y>-0.1)]*=2