1
我创建看起来像这样的随机数据源:扩大“像素”上matplotlib + numpy的阵列
这是我使用gennerate并绘制所述第一图像的代码。
import pandas as pd
import numpy as np
import numpy.ma as ma
import matplotlib.pyplot as plt
msize=25
rrange=5
jump=3
start=1
dpi=96
h=500
w=500
X,Y=np.meshgrid(range(0,msize),range(0,msize))
dat=np.random.rand(msize,msize)*rrange
msk=np.zeros_like(dat)
msk[start::jump,start::jump].fill(1)
mdat=msk*dat
mdat[mdat==0]=np.nan
mmdat = ma.masked_where(np.isnan(mdat),mdat)
fig = plt.figure(figsize=(w/dpi,h/dpi),dpi=dpi)
cmap = plt.get_cmap('RdYlBu')
cmap.set_bad(color='#cccccc', alpha=1.)
plot = plt.pcolormesh(X,Y,mmdat,cmap=cmap)
plot.axes.set_ylim(0,msize-1)
plot.axes.set_xlim(0,msize-1)
fig.savefig("masked.png",dpi=dpi)
通常情况下,此数据源分布不均匀(但这是另一个主题)。
是否有任何种类的内插使得点从其位置“溢出”?
就像我们采用淡黄色点@(1,1),并用相同的颜色/值转动它周围的所有区域(出租车司机公制中的1个半径+对角线)(对于图像上的每个有效点,nans将不扩大)?
正如我在图像上“不论是否供”,上三个最下/左值,这个想法是找到一种方法,做所有正确的观点是相同的,而不是使用GIMP对于;-):
经过一番思考我来到这个解决方案
import numpy as np
import matplotlib.pyplot as plt
t=np.array([
[ 0,0,0,0,0,0,0,0 ],
[ 0,0,0,0,0,0,0,0 ],
[ 0,0,2,0,0,4,0,0 ],
[ 0,0,0,0,0,0,0,0 ],
[ 0,0,0,0,0,0,0,0 ],
[ 0,0,3,0,0,1,0,0 ],
[ 0,0,0,0,0,0,0,0 ],
[ 0,0,0,0,0,0,0,0 ]])
def spill(arr, nval=0, m=1):
narr=np.copy(arr)
for i in range(arr.shape[0]):
for j in range(arr.shape[1]):
if arr[i][j] != nval:
narr[i-m:i+m+1:1,j-m:j+m+1:1]=arr[i][j]
return narr
l=spill(t)
plt.figure()
plt.pcolormesh(t)
plt.savefig("notspilled.png")
plt.figure()
plt.pcolormesh(l)
plt.savefig("spilled.png")
plt.show()
这种解决方案并没有让我非常开心,因为双for循环泄漏()函数中: -/
下面是最后的代码
这本是sppilled输出:
我怎样才能提高上面的代码,以消除双循环。