Python中的X[1:]、X[:-1]、X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]和X[:,:,m:n]等下标索引的思考

字符串,元组,列表等索引都是按照如下格式:

以字符串为例:Python3 字符串 | 菜鸟教程 (runoob.com)

原理

Python 访问子字符串,可以使用方括号 [] 来截取字符串,字符串的截取的语法格式如下:

变量[头下标:尾下标]

索引值以 0 为开始值,-1 为从末尾的开始位置。

举例

明白以上之后,很容易理解如下代码:

a = "abcdef"
x = a[1:] #截取索引1到所有
y = a[:-1] #从索引0(包含)开始,截取到倒数第1位(不包含)
print('这是a:\n',a)
print('这是a[1:]的结果:\n',x)
print('这是a[:-1]的结果:\n',y)

=============================================

输出结果:
这是a:
 abcdef

这是a[1:]的结果:
 bcdef

这是a[:-1]的结果:
 abcde

再来一个例子:注意区分a为矩阵时的变化。

import numpy as np

a = np.arange(0, 10, 1)
print('这是原来的a:', a)
print('取出a的前5个元素a[:5]:', a[:5])
print('取出a第5个后的所有元素a[5:]:', a[5:])
a = np.reshape(a, (5, 2))
print('将a变成5*2的矩阵:', a)
print('取出矩阵a的前2个元素a[:2]:', a[:2])


===============================================
输出结果如下:

这是原来的a: [0 1 2 3 4 5 6 7 8 9]

取出a的前5个元素a[:5]: 
[0 1 2 3 4]

取出a第5个后的所有元素a[5:]: 
[5 6 7 8 9]

将a变成5*2的矩阵: 
[[0 1]
 [2 3]
 [4 5]
 [6 7]
 [8 9]]

取出矩阵a的前2个元素a[:2]: 
[[0 1]
 [2 3]]

如果还不理解的话,我再举一个list列表的截取:

list = ['Google', 'Runoob', "Zhihu", "Taobao", "Wiki"]
 
# 读取所以1的元素,也就是说读取第二位
print ("list[1]: ", list[1])

# 从索引1开始,读取到索引-2,也就是说从第二位开始(包含)截取到倒数第二位(不包含)
print ("list[1:-2]: ", list[1:-2])

============================================================================
以上实例输出结果:

list[1]:  Runoob

list[1:-2]:  ['Runoob', 'Zhihu']

注意:a[0]与a[0,:]作用相同,都是选取第0行。具体看下代码:

import numpy as np
a= np.arange(1,5).reshape(2,2)

print('这是a:\n',a)
print('这是a[0]:\n',a[0])
print('这是a[0,:]:\n',a[0])
print('这是a[1]:\n',a[1])

输出如果如下:=================
这是a:
 [[1 2]
 [3 4]]
这是a[0]:
 [1 2]
这是a[0,:]:
 [1 2]
这是a[1]:
 [3 4]

进阶

尝试使用X[1:]和X[:-1]表示如下式子:

分析如下:

代码如下:

注意这是用向量表示

y = sum((x[1:]-x[:-1]))

具体应用:Optimization (scipy.optimize)The Rosenbrock function

拓展 

数组矩阵的行列也是从索引0开始的,所以解释如下:

对于X[:,0];
是取二维数组中第一维的所有数据

对于X[:,1]
是取二维数组中第二维的所有数据

对于X[:,m:n]
是取二维数组中第m维到第n-1维的所有数据

对于X[:,:,0]
是取三维矩阵中第一维的所有数据

对于X[:,:,1]
是取三维矩阵中第二维的所有数据

对于X[:,:,m:n]
是取三维矩阵中第m维到第n-1维的所有数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值