我的水平颜色条上的标签太靠近了,我不想进一步减小文字大小:
cbar = plt.colorbar(shrink=0.8, orientation='horizontal', extend='both', pad=0.02)
cbar.ax.tick_params(labelsize=8)
Run Code Online (Sandbox Code Playgroud)

我想保留所有刻度,但删除所有其他标签.
我发现的大多数示例都将用户指定的字符串列表传递给cbar.set_ticklabels().我正在寻找一个通用的解决方案.
我玩弄各种变化
cbar.set_ticklabels(cbar.get_ticklabels()[::2])
Run Code Online (Sandbox Code Playgroud)
和
cbar.ax.xaxis.set_major_locator(matplotlib.ticker.MaxNLocator(nbins=4))
Run Code Online (Sandbox Code Playgroud)
但我还没有找到神奇的组合.
我知道必须有一个干净的方法来使用定位器对象.
我正在使用python/numpy/scipy实现此算法,以根据地形方面和坡度对齐两个数字高程模型(DEM):
"用于量化冰川厚度变化的卫星高程数据集的共同配准和偏差校正",C.Nuth和A.Kääb,doi:10.5194/tc-5-271-2011
我有一个框架设置,但scipy.optimize.curve_fit提供的拟合质量很差.
def f(x, a, b, c):
y = a * numpy.cos(numpy.deg2rad(b-x)) + c
return y
def compute_offset(dh, slope, aspect):
import scipy.optimize as optimization
idx = random.sample(range(dh.compressed().size), 10000)
xdata = numpy.array(aspect.compressed()[idx], float)
ydata = numpy.array((dh/numpy.tan(numpy.deg2rad(slope))).compressed()[idx], float)
#Generate synthetic data to test curve_fit
#xdata = numpy.arange(0,360,0.01)
#ydata = f(xdata, 20.0, 130.0, -3.0) + 20*numpy.random.normal(size=len(xdata))
print xdata
print ydata
x0 = numpy.array([0.0, 0.0, 0.0])
fit = optimization.curve_fit(f, xdata, ydata, x0)[0]
#optimization.leastsq(f, x0[:], args=(xdata, ydata))
genplot(xdata, ydata, fit)
return fit
def …Run Code Online (Sandbox Code Playgroud) 我有3D堆栈的蒙版数组.我想对每一行的值进行线性回归,col(空间索引)沿轴0(时间).这些堆叠的尺寸各不相同,但典型的形状可能是(50,2000,2000).我的空间有限但时间密集的测试用例具有以下几个方面:
stack.ma_stack.shape
Run Code Online (Sandbox Code Playgroud)
(1461,390,327)
我做了一个快速测试循环每一行,col:
from scipy.stats.mstats import linregress
#Ordinal dates
x = stack.date_list_o
#Note: idx should be row, col
def sample_lstsq(idx):
b = stack.ma_stack[:, idx[0], idx[1]]
#Note, this is masked stats version
slope, intercept, r_value, p_value, std_err = linregress(x, b)
return slope
out = np.zeros_like(stack.ma_stack[0])
for row in np.arange(stack.ma_stack.shape[1]):
for col in np.arange(stack.ma_stack.shape[2]):
out[row, col] = sample_lstsq((row, col))
Run Code Online (Sandbox Code Playgroud)
这很有效(慢慢地).我知道必须有一个更有效的方法.
我开始玩索引数组和np.vectorize,但我认为这实际上不会提供任何真正的改进.我考虑过把所有东西都扔给熊猫或试图移植到Cython,但我希望我能坚持使用NumPy/SciPy.或者并行解决方案是提高性能的最佳选择?
另外,有没有人对NumPy/SciPy线性回归选项进行基准测试?我遇到了以下选项,但没有测试过自己:
我希望有一种现有的方法可以提供显着的性能提升而不需要太多的实现工作.谢谢.
2013年12月3日编辑@ 02:29
@HYRY建议的方法对于上面描述的样本数据集(在所有维度(空间和时间)中)是连续的(未屏蔽的),完美地工作(约15秒运行时).但是,当将包含缺失数据的掩码数组传递给np.linalg.leastsq时,所有掩码值都会用fill_value(defualt 1E20)填充,这会导致伪线性拟合.
幸运的是,numpy蒙面数组模块有np.ma.polyfit(deg = 1),它可以处理像np.linalg.leastsq这样的2D y数组.看一下源代码(https://github.com/numpy/numpy/blob/v1.8.0/numpy/ma/extras.py#L1852),ma polyfit只是np.polyfit的一个包装器,它使用了一个组合掩码来自x和y面具.当y中缺失数据的位置不变时,这适用于2D y.
不幸的是,我的数据在空间和时间上有可变的丢失数据位置.这是另一个堆栈的示例:
In [146]: …Run Code Online (Sandbox Code Playgroud)