<p>这不是一个接近正确答案的地方:在每次<code>range_find</code>调用的冗余检查中使用内存是浪费的,而且它只沿着x=y轴运行。然而,它展示了如何从零开始编写它的基本知识</p>
<p>基本上,选择一个区域,找到该区域中的所有X和Y,收集它们,然后计算平均值,并存储在单独的数组中</p>
<pre><code>import numpy as np
import matplotlib.pyplot as plt
x = np.random.uniform(low=-20, high=20, size=(1000))
y = np.random.uniform(low=-20, high=20, size=(1000))
def range_find(low,high,xs,ys):
_xs = []; _ys = [];
if len(xs) != len(ys):
print("Inputs must be the same size")
return None
i = 0
while (i < len(xs)):
j = 0
while (j < len(ys)):
if (low < float(xs[i]) < high) and (low < float(ys[j]) < high):
#print(" ~xs[%d],ys[%d] -> (%f,%f)"%(i,j,xs[i],ys[j]))
_xs.append(xs[i]); _ys.append(ys[j]);
j += 1
i += 1
xmean = np.mean(np.asarray(_xs))
ymean = np.mean(np.asarray(_ys))
#print("x-Mean: %f"%(xmean))
#print("y-Mean: %f"%(ymean))
return xmean, ymean
xms = []; yms = [];
vs = range_find(-20.1,-16.0,x,y); xms.append(vs[0]);yms.append(vs[1]);
vs = range_find(-15.999,-12.0,x,y); xms.append(vs[0]);yms.append(vs[1]);
vs = range_find(-11.999,-8.0,x,y); xms.append(vs[0]);yms.append(vs[1]);
vs = range_find(-7.999,-4.0,x,y); xms.append(vs[0]);yms.append(vs[1]);
vs = range_find(-3.999,0.0,x,y); xms.append(vs[0]);yms.append(vs[1]);
vs = range_find(0.0,3.999,x,y); xms.append(vs[0]);yms.append(vs[1]);
vs = range_find(4.0,7.999,x,y); xms.append(vs[0]);yms.append(vs[1]);
vs = range_find(8.0,11.999,x,y); xms.append(vs[0]);yms.append(vs[1]);
vs = range_find(12.0,15.999,x,y); xms.append(vs[0]);yms.append(vs[1]);
vs = range_find(16.0,20.1,x,y); xms.append(vs[0]);yms.append(vs[1]);
xms = np.asarray(xms)
yms = np.asarray(yms)
fig=plt.figure()
ax=fig.add_subplot(111)
ax.scatter(x,y)
ax.set_yticks([-20.0, -16.0, -12.0, -8.0, -4.0, 0, 4.0, 8.0, 12.0, 16.0, 20.0])
ax.set_xticks([-20.0, -16.0, -12.0, -8.0, -4.0, 0, 4.0, 8.0, 12.0, 16.0, 20.0])
ax.yaxis.grid(True)
ax.xaxis.grid(True)
plt.scatter(xms,yms, color = "red")
</code></pre>
<p><a href="https://i.stack.imgur.com/KjSbG.png" rel="nofollow noreferrer">Scatter-plot</a></p>
<p>编辑:为10x10案例添加了网格记号标记</p>