python-3.x - [::-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, 50, 40, 30, 20, 10])
详细地,解释器将该索引表达式转换为:
In [152]: a.__getitem__(slice(None,None,-1))
Out[152]: array([60, 50, 40, 30, 20, 10])
在幕后numpy
只是返回 aview
变化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, 3, 2, 1]
并以“反向”顺序生成数字:
In [157]: np.arange(0,10,1)
Out[157]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
In [158]: np.arange(9,-1,-1)
Out[158]: array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])
In [160]: np.arange(9,-1,-3)
Out[160]: array([9, 6, 3, 0])
在这里,我们必须指定端点,而在切片时,可以是None
,并且取自对象的形状。
推荐阅读
- java - 在 Java 中赋值后的内存分配
- python - 如何使 QListWidgetItem 根据其内容自动调整大小,并适合其 QListWidget
- java - 使用 Java-Stream 将字符串转换为 Map 并在结果 Map 中重复值
- c# - EPPlus:如何用静态值替换所有公式?
- c++ - 对任意数量的类使用可变参数模板参数
- python - 在 PIL 中调整图像大小时不了解此 ValueError 的原因
- mysql - MySql 是否有最大锁定超时设置
- reactjs - 如何在 React Native TextInput 中添加多色占位符文本?
- arduino - Microchip Studio / STK500 得到 0xc0,预期为 0x00
- docker - macvlan 上的 Docker 容器无法 ping 外部互联网