numpy diff怪异行为

2024-04-25 17:28:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个奇怪行为的例子:

a = list(img_arr[y_coord_1,:])
print a
print np.diff(a)

>>[62, 62, 62, 62, 62, 62, 62, 62, 63, 62, 96, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 66, 63, 64, 64, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 65, 65, 64, 63, 63, 63, 63, 63, 63, 63, 64, 64, 63, 63, 63, 63, 63, 64, 65, 65, 64, 63, 63, 63, 63]
>>[  0   0   0   0   0   0   0   1 255  34   2   0   0   0   0   0   0  0
0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
0   0   0   0   0   0   0   0   0   0   0   0   0 224 253   1   0 255
0   0   0   0   0   0   0   0   0   1   1   0 255 255   0   0   0   0
0   0   1   0 255   0   0   0   0   1   1   0 255 255   0   0   0]

现在,当我在终端上运行这个程序时,我得到的正确答案是

^{pr2}$

什么样的事情会导致这种情况-我在这个脚本中使用了一些其他编译的库,如果这有关联的话

编辑:我刚刚发现是负数错了,而且上限很可疑。看起来是数据类型问题。。在


Tags: 答案程序脚本终端imgnp情况diff
1条回答
网友
1楼 · 发布于 2024-04-25 17:28:59

.tolist()是将数组转换为列表(或嵌套列表)的更好方法。它一路把转换带下来。list()只在一个级别上迭代。而且由于数组已经是iterable了,我不认为list(anarray)做了任何有用的事情。在

从数组开始:

In [789]: z
Out[789]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8)
In [790]: type(list(z)[0])
Out[790]: numpy.uint8

list()与此列表理解相同:

^{pr2}$

正确的列表转换

In [792]: type(z.tolist()[0])
Out[792]: int

你为什么首先使用list()?你不需要它来做diff。如果溢出是一个问题,则数据类型转换更好。在

np.diff将在获取差异之前将列表转换回数组。在

In [793]: np.diff(z.tolist())
Out[793]: array([1, 1, 1, 1, 1, 1, 1, 1, 1])
In [794]: np.diff(list(z))
Out[794]: array([1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=uint8)
In [795]: np.diff(z.astype('int'))
Out[795]: array([1, 1, 1, 1, 1, 1, 1, 1, 1])
In [796]: np.diff(z)
Out[796]: array([1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=uint8)
In [797]: np.array(list(z))
Out[797]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8)

相关问题 更多 >