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輸出:
我怎樣才能提高上面的代碼,以消除雙循環。