擅长:python、mysql、java
<p>无法输出2D numpy数组,因为输出行的长度可能不同。我会接受一个numpy数组的列表。首先,让我们生成一些数据:</p>
<pre><code>img = np.random.choice([0,255], size=(1080, 960))
</code></pre>
<p>然后迭代每一行:</p>
^{pr2}$
<p>通过获取差异,我们只需检测发生变化的位置,然后使用这些索引<code>idx</code>来选择一个连续的条纹中的起始元素。这个解决方案比@DavidWinder的解决方案(30毫秒vs.150毫秒)更简单、更快。在</p>
<p>完全矢量化的解决方案可能会更快一些,但代码会有点复杂。它将包括扁平化数组,散乱和分解索引。。。最后应用<code>np.split</code>,这不是一个非常快的操作,因为它涉及到创建一个列表。所以我认为这个答案在速度/代码简单性之间已经足够好了。在</p>
<h2>编辑#1</h2>
<p>如果首选输出是在末尾填充0的数组,则最好创建一个零数组并用<code>out</code>list的值填充它。首先找出哪一行有更多元素,然后创建数组:</p>
<pre><code>max_elms = np.max([len(x) for x in out])
arr = np.zeros((1080, max_elms), dtype=np.int32)
</code></pre>
<p>然后迭代<code>out</code>列表和<code>arr</code>,用<code>out</code>列表中的值填充<code>arr</code>的值:</p>
<pre><code>for row, data in zip(arr, out):
row[:len(data)] = data
</code></pre>