【发布时间】:2015-07-10 21:06:40
【问题描述】:
我使用食谱示例 frin http://wiki.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data 来制作等高线图。但是我的一些数据可能只包含零,在这种情况下,我会得到一个 ValueError:zero-size array to reduction operation minimum 它没有身份。
import numpy as np
from scipy.interpolate import griddata
import matplotlib.pyplot as plt
from numpy.random import uniform, seed
# make up some randomly distributed data
seed(1234)
npts = 200
x = uniform(-2,2,npts)
y = uniform(-2,2,npts)
z = 0*x*np.exp(-x**2-y**2) #Here i multiply by zero
# define grid.
xi = np.linspace(-2.1,2.1,100)
yi = np.linspace(-2.1,2.1,100)
# grid the data.
zi = griddata((x, y), z, (xi[None,:], yi[:,None]), method='cubic')
#zi[0][0]=0.00001 would make everything ok again
print(zi)
# do the plotting and save the result
CS = plt.contour(xi, yi, zi)
plt.show()
有没有优雅的方法来处理这个问题? 这值得 matplotlib 中的一张票吗?
【问题讨论】:
-
您希望代码表现如何?你提供了错误的数据,你会得到一个例外。对我来说听起来不错。
-
好吧,我不会说我提供的是“坏”数据。 z = 0*x*np.exp(-x2-y2) + 0.0000001,有效并包含尽可能多的信息。
-
但是,在使用 griddata 对上述代码进行插值后,您会得到一组 NaN,而不是一组 0 或其他数字,因为很难决定如何在等高线图中使用它。抛出异常似乎是一个合理的响应。
-
@Tommy 正确我在尝试制作示例时注意到了 NaN(我的原始代码从 csv 文件中生成了零数组)。有趣的是,只要不是全部都是 NaN,plt.contour 就可以处理 NaN,(去掉 *0),但是如果 all 元素都是零,它就不能处理这个问题。那是我遇到此错误的唯一一次。
标签: python numpy matplotlib scipy