python numpy.diff_python – numpy diff奇怪的行为

我有一个奇怪的numpy差异行为的情况:

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]

现在,当我在终端中运行时,我得到了正确答案

array([ 0, 0, 0, 0, 0, 0, 0, 1, -1, 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, -32, -3, 1,

0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,

0, -1, -1, 0, 0, 0, 0, 0, 0, 1, 0, -1, 0,

0, 0, 0, 1, 1, 0, -1, -1, 0, 0, 0])

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

编辑:我刚刚发现它的负数是错的 – 而且上限非常可疑.看起来像一个dtype问题..

最佳答案 .tolist()是一种将数组转换为列表(或嵌套列表)的更好方法.它一直进行转换. list()只是在一个级别上迭代.由于数组已经可迭代,我不认为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()与此列表理解相同:

In [791]: type([i for i in z][0])

Out[791]: numpy.uint8

正确的列表转换

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

Out[792]: int

你为什么首先使用list()?差异并不需要它.如果溢出是一个问题,dtype转换更好.

在获取差异之前,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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值