list[::-1] :list[::-1],就是将list翻转过来的意思,从最后一个到第一个开始。

a = [1,3,4,2,'a','d']
print a[::-1]
>>> a = [1,3,4,2,'a','d']
print a[3::-1]

>>> [2,4,3,1]

语法:[start:stop:step]

step代表切片步长;切片区间为[start,stop),包含start但不包含stop

1.step > 0,从左往右切片

2.step <0,从右往左切片

3.start、stop、step 为空值时的理解:

start、stop默认为列表的头和尾,并且根据step的正负进行颠倒;step的默认值为1

4.start、stop为负,无论step正负,start、stop代表的是列表从左到右的倒数第几个元素

 

st = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
print(st[2:6:2])
print(st[6:2:-2])
print(st[::1])
print(st[::-1])  # 倒序输出
print(st[-1])


输出结果:
['c', 'e']
['g', 'e']
['a', 'b', 'c', 'd', 'e', 'f', 'g']
['g', 'f', 'e', 'd', 'c', 'b', 'a']
g

NUMPY

list = [[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[2, 2, 3], [4, 9, 6], [7, 8, 9]]]
list = np.array(list)

print(list[:, 1, :])
print(list[:, -1, 0])

[[4 5 6]
 [4 9 6]]
[7 7]

 

swapaxes和transpose的区别:

 

0.基本情况介绍

numpy作为一个高效率的矩阵计算工具,除了基本的加减乘除以及切片外,还有比较独特的索引功能。索引功能我们比较常见有序号索引以及转置,如下:

import numpy as np
arr = np.arange(20).reshape(4,5)
##
建立了一个4行5列的矩阵

 

##索引取其中的第4、3、1、2行
arr[[3,2,0,1]]

 

##获取其转置矩阵
arr.T
##变成了5行4列的矩阵

 

1.升级

当我们开始遇到多维数组时,题目中提到的transpose和swapaxes就开始发挥作用了。

1.1 transpose 按照多维数组的轴的索引进行变换。

乍一听是不是有点绕,别急,慢慢来。首先我们来了解下多维数组的轴是什么东东?

对于多维数组来说,一个维度就是一个轴。

我们知道一维为一条线,二维为一个平面,三维为一个空间,到四维已经超越了我们人类肉眼能够观测的空间。

  • 对于一维数组来说,有一个轴,如 arr1 = np.array([1,2,3,4]),

arr1.ndim = 1 arr1.shape = (4,)

  • 对于二维数组来说,有两个轴,如arr2 = np.array([[1,2,3,4],

[5,6,7,8]]),

arr1.ndim = 2 arr2.shape = (2,4)

  • 对于三维数组来说,有三个轴,如arr3 = np.array([[[1,2,3,4],

[5,6,7,8]],

[[9,10,11,12],

[13,14,15,16]]]),

arr2.ndim = 3 arr3.shape = (2,2,4)

是否大概对轴有一个直观的了解?

言归正传,对于transpose来说,会将多维数组的轴编号,也就是给各个轴建立索引,我们自设一个三维数组,维数为(2,2,4),有三个轴:

arr = np.arange(16).reshape(2,2,4)

 

 

当我们进行变换时,有 arr.transpose(2,1,0),这里就是让索引2变换到了索引0的位置,索引0变到了索引2的位置,索引1保持不变,根据索引的变动,形状也发生相关位置的变化,如下:

 

这个时候,我们的多维数组就变成了:

 

1.2 swapaxes 对轴进行两两置换

理解了上面的transpose,应该再理解swapaxes就不难了。swapaxes实际上也是针对轴索引进行变化,区别就在于transpose可以一次搞三个,但是swapaxes只能两两置换。

对于swapaxes来说,括号内的两参数,交换位置和不交换,实际结果相同。

接上例:

arr.swapaxes(1,2)(实际上等价于arr.swapaxes(2,1)),那么原多维数组就变为: