微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

[::-1] 实际上在 numpy 中做什么?

如何解决[::-1] 实际上在 numpy 中做什么?

我有类似的东西

import numpy as np
a = np.array([10,20,30,40,50,60])

# this will get the indices of elements in reverse sorted order
a.argsort()[::-1]

我可以想象 -1 指定了方向,但是 :: 运算符有什么作用? 这是一个 numpy 的东西还是一个 python 的东西?

解决方法

它反转数组:

In [149]: a = np.array([10,20,30,40,50,60])
In [150]: b = a[::-1]
In [151]: b
Out[151]: array([60,10])

详细地,解释器将该索引表达式翻译为:

In [152]: a.__getitem__(slice(None,None,-1))
Out[152]: array([60,10])

在幕后 numpy 只是返回一个 view,其中 strides 发生了变化:

In [153]: a.strides
Out[153]: (8,)
In [154]: b.strides
Out[154]: (-8,)

那个 -1 切片步骤可以在其他地方使用

反转字符串和列表:

In [155]: 'astring'[::-1]
Out[155]: 'gnirtsa'
In [156]: [1,2,3,4][::-1]
Out[156]: [4,1]

并以“反向”顺序生成数字:

In [157]: np.arange(0,10,1)
Out[157]: array([0,1,4,5,6,7,8,9])
In [158]: np.arange(9,-1,-1)
Out[158]: array([9,0])
In [160]: np.arange(9,-3)
Out[160]: array([9,0])

这里我们必须指定端点,而在切片时那些可以是 None,并取自对象的形状。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。