<p>我的数据对象是以下对象的实例:</p>
<pre class="lang-py prettyprint-override"><code>class data_instance:
def __init__(self, data, tlabel):
self.data = data # 1xd numpy array
self.true_label = tlabel # integer {1,-1}
</code></pre>
<p>到目前为止,在代码中,我有一个名为<code>data_history</code>的列表,其中包含<code>data_istance</code>和一组<code>centers</code>(形状为(k,d)的numpy数组)。你知道吗</p>
<p>对于给定的数据实例<code>new_data</code>,我想要:</p>
<ul>
<li><p>1/从<code>centers</code>(欧几里德距离)得到最接近<code>new_data</code>的中心,称之为<code>Nearest_center</code>。</p></li>
<li><p>2/迭代槽<code>data_history</code>和:</p>
<ul>
<li>2.1/选择最近中心为<code>Nearest_center</code>(1/的结果)的元素到名为<code>neighbors</code>的列表中。你知道吗</li>
<li>2.2/获取<code>neighbors</code>中对象的标签。你知道吗</li>
</ul></li>
</ul>
<p>贝娄是我的代码工作,但它钢慢,我正在寻找一些更有效的。你知道吗</p>
<p><strong>我的代码</strong></p>
<p>对于1/</p>
<pre class="lang-py prettyprint-override"><code>def getNearestCenter(data,centers):
if centers.shape != (1,2):
dist_ = np.sqrt(np.sum(np.power(data-centers,2),axis=1)) # This compute distance between data and all centers
center = centers[np.argmin(dist_)] # this return center which have the minimum distance from data
else:
center=centers[0]
return center
</code></pre>
<p>对于2/(优化)</p>
<pre class="lang-py prettyprint-override"><code>def getLabel(dataPoint, C, history):
labels = []
cluster = getNearestCenter(dataPoint.data,C)
for x in history:
if np.all(getNearestCenter(x.data,C) == cluster):
labels.append(x.true_label)
return labels
</code></pre>