我有一个新的形状数组(1080960)
[[0 0 255 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 255 0 0]
...
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 255 255 ... 0 0 0]]
我想输出一个numpy数组,用一个0和一个255替换0和255的重复值
numpy数组是二进制图像的表示,它的像素形式为bbbwwwwwbbbbwww,其中B是黑色,W是白色。我想把它转换成bww。在
示例:
输入:
^{pr2}$输出:
[[0,255,0],
[255,0,255]
[0,255,0,255,0,255]]
您可以迭代行并通过构建新数组对元素进行分组,同时检查最后一个元素并仅在差异时追加。在
功能如下:
迭代并用该函数中的新行替换形状中的每一行
无法输出2D numpy数组,因为输出行的长度可能不同。我会接受一个numpy数组的列表。首先,让我们生成一些数据:
然后迭代每一行:
^{pr2}$通过获取差异,我们只需检测发生变化的位置,然后使用这些索引
idx
来选择一个连续的条纹中的起始元素。这个解决方案比@DavidWinder的解决方案(30毫秒vs.150毫秒)更简单、更快。在完全矢量化的解决方案可能会更快一些,但代码会有点复杂。它将包括扁平化数组,散乱和分解索引。。。最后应用
np.split
,这不是一个非常快的操作,因为它涉及到创建一个列表。所以我认为这个答案在速度/代码简单性之间已经足够好了。在编辑#1
如果首选输出是在末尾填充0的数组,则最好创建一个零数组并用
out
list的值填充它。首先找出哪一行有更多元素,然后创建数组:然后迭代
out
列表和arr
,用out
列表中的值填充arr
的值:相关问题 更多 >
编程相关推荐