擅长:python、mysql、java
<p>您的代码在O(n<em>[因为set()]</em>+nc<em>[因为for循环]</em>)。在大多数实际应用程序中,最终都会得到O(nc)*,因为您需要为数组分配空间。不过,有几个技巧可以让它更高效:</p>
<ol>
<li>使用dict。Dicts是使用散列实现的,平均来说,散列时间应该是恒定的。在</li>
<li>不要在每一步迭代c可能的特性,而是记住每个特性的索引。在</li>
</ol>
<p>以下是我的实现:</p>
<pre><code>import numpy as np
def ohc(x):
elem_to_idx = {}
for e in x:
if e not in elem_to_idx:
elem_to_idx[e] = len(elem_to_idx)
c = len(elem_to_idx)
X = np.zeros((len(x), c))
for idx, val in enumerate(x):
X[idx, elem_to_idx[val]] = 1
return X
</code></pre>
<p><em>*根据您打算如何处理X矩阵,您可能需要使用numpy.稀疏你的矩阵不能分配很多内存</p>