<p>使用<code>set</code>可以:</p>
<pre><code>In [111]: np.array([tuple(set(i)) for i in v.ravel().tolist()]).reshape(3,3)
Out[111]:
array([[(0, 1, 2), (0, 1, 2, 3), (0, 1, 3)],
[(0, 1, 2, 3), (0, 1, 2, 3), (1, 3)],
[(0, 1, 2, 3), (0, 1, 3), (0, 1, 3)]], dtype=object)
</code></pre>
<p>我返回了一个二维元组数组(dtype对象)。我没有保存结构化数组数据类型。我也可以返回一个集合数组,或者一个集合列表。在</p>
<p>或者使用<code>tolist</code>嵌套元组列表</p>
^{pr2}$
<p>我不需要原始的<code>tolist</code>;对raveled数组进行迭代就足够了</p>
<pre><code>In [115]: [set(i) for i in v.ravel()]
Out[115]:
[{0, 1, 2},
{0, 1, 2, 3},
{0, 1, 3},
{0, 1, 2, 3},
{0, 1, 2, 3},
{1, 3},
{0, 1, 2, 3},
{0, 1, 3},
{0, 1, 3}]
</code></pre>
<p><code>unique</code>给出了相同的结果;我不能做<code>np.unique(i)</code>,因为它试图处理整个1元素结构的数组:</p>
<pre><code>In [117]: [np.unique(i.tolist()) for i in v.ravel()]
Out[117]:
[array([0, 1, 2]),
array([0, 1, 2, 3]),
array([0, 1, 3]),
array([0, 1, 2, 3]),
array([0, 1, 2, 3]),
array([1, 3]),
array([0, 1, 2, 3]),
array([0, 1, 3]),
array([0, 1, 3])]
</code></pre>
<p>======================</p>
<p>这会将其转换为三维阵列</p>
<p>在[134]:v1=v.view(np.D类型('(6,)i4')</p>
<pre><code>In [135]: v1
Out[135]:
array([[[2, 0, 0, 0, 0, 1],
[1, 0, 3, 2, 1, 2],
[3, 1, 3, 0, 3, 1]],
[[1, 2, 1, 1, 0, 3],
[3, 0, 3, 2, 3, 1],
[1, 3, 1, 1, 3, 3]],
[[0, 2, 3, 3, 1, 1],
[0, 1, 1, 1, 3, 0],
[0, 3, 3, 3, 1, 0]]])
</code></pre>
<p>不过,我不确定这是否有用。将<code>unique</code>应用于最后一个维度与结构化表单有相同的问题。在</p>
<pre><code>In [137]: [np.unique(i) for i in v1.reshape(-1,6)]
</code></pre>
<p>在=====================
我在下面写的是一维结构化数组。这个例子是二维的,当然可以把它展平。在</p>
<hr/>
<p>我的第一个想法是将其转换为一个列表,并对每个元组应用<code>set</code>。它是一个结构化数组,因此<code>v.tolist()</code>将是元组的列表。在</p>
<p>在Dan发现的链接中,我的第一个建议就是:</p>
<p><a href="https://stackoverflow.com/a/32381082/901925">https://stackoverflow.com/a/32381082/901925</a></p>
<p>(重点放在计数上,<code>bincount</code>解决方案在这里没有帮助。)。在</p>
<pre><code> [set(i) for i in v.tolist()]
</code></pre>
<p>你甚至不需要翻译,尽管我需要测试它。我不知道结构化记录是否可以作为<code>set</code>的参数。在</p>
<pre><code> [set(i) for i in v]
</code></pre>
<p>不管结果如何,结果都是不同长度的项目列表。它们是集合、列表还是数组并不重要。只有它们不会是结构化数组——除非我们花额外的精力来确定哪些字段是唯一的。在</p>
<p>由于字段都是相同的数据类型,因此很容易将其转换为二维数组。在</p>
<pre><code> v.view(int, 6) # 6 fields
</code></pre>
<p>应该做到这一点(需要测试)。(更正,将其转换为纯int数组并不像我想象的那么容易)。在</p>
<p><code>np.unique</code>应该和<code>set</code>一样工作;但是我怀疑<code>set</code>对于6个值(或任何其他合理数量的字段)更快。在</p>