回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个numpy阵列:</p>
<pre><code>>>> n1 = np.array([1, 1, 2, 1, 4, 5, 3, 8, 2, 9, 9])
</code></pre>
<p>由此,我可以得到从开始到下一个较低数量开始之前的最高值的元素数量,如下所示:</p>
^{pr2}$
<p>我可以在数组的开头插入0:</p>
<pre><code>>>> wherediff = np.insert(wherediff, 0, 0)
>>> wherediff
array([0, 3, 6, 8])
</code></pre>
<p>我可以得到每个连续值之间的元素数:</p>
<pre><code>>>> sum_vals = np.abs(wherediff[1:] - wherediff[:-1])
>>> sum_vals
array([3, 3, 2])
</code></pre>
<p>现在,我想生成另一个具有以下属性的numpy数组:</p>
<ul>
<li>对于包含0到2的元素,我需要值1(1的数量是<code>sum_vals[0]</code>,我希望它位于<code>range(wherediff[0], wherediff[1])</code>的位置)</li>
<li>对于包含3到5的元素,我需要值2(2s的数量是<code>sumvals[1]</code>,我希望它位于<code>range(wherediff[1], wherediff[2])</code>的位置</li>
<li>对于包含6到7的元素,我需要值3</li>
<li>对于最后一个元素,我需要值4</li>
</ul>
<p>我试过了:</p>
<pre><code>>>> n3 = []
>>> for i in range(1, wherediff.shape[0]):
... s1 = set(range(wherediff[i]))
... s2 = set(range(wherediff[i-1]))
... s3 = np.setdiff1d(s1, s2)[0]
... n3.append(np.repeat(i, len(s3)))
</code></pre>
<p>我想稍后切换到一个数组,但是<code>setdiff1d</code>函数没有按预期执行。它正在这样做:</p>
<pre><code>>>> for i in range(1, wherediff.shape[0]):
... s1 = set(range(wherediff[i]))
... s2 = set(range(wherediff[i-1]))
... s3 = np.setdiff1d(s1, s2)[0]
... print(s3)
...
set([0, 1, 2])
set([0, 1, 2, 3, 4, 5])
set([0, 1, 2, 3, 4, 5, 6, 7])
</code></pre>
<p>然而我想要</p>
<pre><code>0 1 2
3 4 5
6 7
8, 9, 10
</code></pre>
<p>有什么想法吗?在</p>