在我们进行PCA进行分析之外,有时候想加载平方根的结果,但是显示无法正常展示,我们这里可以用一个绝对值来实现正常影像的加载
Srqt: Tile error: Array: Max (NaN) cannot be less than min (NaN).
对于在计算 PCA 时遇到此问题的人,我发现“数组:最大值(NaN)不能小于最小值(NaN)”错误的根本原因是负特征值。在某些情况下,您最终会得到非常非常小的负数(例如 -1e-13)并且调用它的 sqrt() 会导致此错误。据我了解,当您具有高度相关的输入波段并且最后几个特征值最终非常接近 0 时,就会发生这些情况。
一个简单的解决方法是在求平方根之前对特征值调用 abs()。例如
var sdImage = ee.Image(eigenValues.abs(). sqrt())
代码:
// 一个演示错误的最小例子
// 阵列。最大(NaN)不能小于最小(NaN)。
// 运行脚本并检查任何像素以查看错误
// 当我们在有负数的数组上调用sqrt()时,就会发生这个错误。
var image = ee.Image("users/ujavalgandhi/temp/aerial_photo_clipped");
var geometry = image.geometry();
Map.addLayer(image, {}, 'Image');
Map.centerObject(image);
var projection = image.projection();
var scale = projection.nominalScale();
var texture = image.glcmTexture({size:5});
Map.addLayer(texture, {}, 'Texture')
var pca = PCA(texture).select(['pc1', 'pc2', 'pc3'])
Map.addLayer(pca, {}, 'PCA');
//**************************************************************************
//