这个问题类似于有关其他语言(例如此处)浮点错误的问题,但我没有找到令人满意的解决方案.
我正在开展一个涉及调查具有某些特征的矩阵的项目.作为其中的一部分,我需要知道列表中有多少矩阵是唯一的.
D <- as.matrix(read.table("datasource",...))
mat_list <- vector('list',length=length(samples_list))
mat_list <- lapply(1:length(samples_list),function(i) matrix(data=0,nrow(D),ncol(D)))
Run Code Online (Sandbox Code Playgroud)
然后,该列表由基于元素的数据的计算填充samples_list.在mat_list填充之后,我需要删除重复项.运行
mat_list <- unique(mat_list)
Run Code Online (Sandbox Code Playgroud)
把事情缩小了很多; 但是,其中许多元素实际上都是彼此的机器错误.该函数unique不允许指定精度,我无法找到修改的源代码.
我有一个想法是:
ErrorReduction<-function(mat_list, tol=2){
len <- length(mat_list)
diff <- mat_list[[i]]-mat_list[[i+1]]
for(i in 1:len-1){
if(norm(diff,"i")<tol){
mat_list[[i+1]] <- mat_list[i]
}
}
mat_list<-unique(mat_list)
return(mat_list)
}
Run Code Online (Sandbox Code Playgroud)
但这只关注成对差异.使用嵌套for循环执行此操作很简单但很可能效率低下.
您知道哪些方法或者您有什么想法来处理识别和删除机器错误中重复的矩阵的问题?
我正在努力可视化一些气候模型的输出。计算是在投影的纬度/经度网格上完成的。由于该模型模拟海冰,因此所有陆地网格单元都被屏蔽。在 Python 中绘制地理信息的标准工具是 Basemap 和 Cartopy,它们都使用 matplotlib 例程。特别是,pcolormesh这是绘图的明显选择。如果没有陆地遮罩,那就很简单了:
X = longitude
Y = latitude
C = variable
fig, ax = plt.subplots()
plt.pcolormesh(X,Y,C)
Run Code Online (Sandbox Code Playgroud)
虽然C允许为掩码数组,但pcolormesh无法处理X和上的掩码数组Y。那么我该如何解决这个问题呢?
举一个简单的例子:
n = 100
X,Y = np.meshgrid(np.linspace(1,5,n),np.linspace(1,5,n))
C = np.sin(X*Y)
fig, ax = plt.subplots()
plt.pcolormesh(X,Y,C)
Run Code Online (Sandbox Code Playgroud)
现在想象我们有一个面具:
X[50:60,:] = np.nan
X[:,50:60] = np.nan
Y[50:60,:] = np.nan
Y[:,50:60] = np.nan
C[50:60,:] = np.nan
C[:,50:60] = np.nan
Run Code Online (Sandbox Code Playgroud)
我必须解决这个问题的第一个想法是只选择有效的条目并重塑X, Y, 和C:
M = np.isnan(X)
X_valid = …Run Code Online (Sandbox Code Playgroud)