如何将特定范围之外的点设置为 0
Posted
技术标签:
【中文标题】如何将特定范围之外的点设置为 0【英文标题】:How can I set the points outside of the certain range to 0 【发布时间】:2021-12-25 16:18:47 【问题描述】:我已经插入了一个图并扩展了 x 和 y,这给了我以下等高线图。如何重新排列 Z 矩阵,使红框外的点为 0。
x=data.columns.astype('float64')
y=data.index.to_numpy()
z=data.to_numpy()
X,Y = np.meshgrid(x, y)
ratio = 4
x_new = x*ratio
y_new=y*ratio
#plt.plot(x_new,y_new)
f = interpolate.interp2d(x, y, z, kind='linear')
z_new = f(x_new, y_new)
X_new,Y_new = np.meshgrid(x_new, y_new)
plt.contourf(X_new, Y_new, znew, alpha = 1, cmap=plt.cm.inferno)
【问题讨论】:
【参考方案1】:这是一个最小的示例,应该很容易适应您的情况。
np.where
函数是你的朋友:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-15, 15, 301)
y = np.linspace(-15, 5, 201)
X_new, Y_new = np.meshgrid(x, y)
znew = np.random.randn(*X_new.shape)
znew = np.where((X_new > 5) & (X_new < 10) &
(Y_new > -2) & (Y_new < 2), znew, 0)
plt.contourf(X_new, Y_new, znew, alpha = 1, cmap=plt.cm.inferno)
【讨论】:
非常感谢,它非常接近,但它会将 z 的所有值设置为零。这是数据drive.google.com/file/d/1M3K1bjc3D8iB8cXZui5Z05yRzQueqGj-/… 你是什么意思它把 z 的所有值都设置为零?恐怕我无法下载您的完整数据集。通常发布问题的方式是提供一个最小的可重现示例,在我的答案中使用一些玩具数据,例如随机数组。见here。 感谢您的回答我刚刚重新安排了案例并为这样的索引做了:idx = (X X_min) &(Y Y_min) X[~idx] = 0 Y[~idx] = 0以上是关于如何将特定范围之外的点设置为 0的主要内容,如果未能解决你的问题,请参考以下文章