python中的[:-1] [:,:-1] python矩阵numpy中array的冒号 逗号

   如何理解[:-1]  [:,:-1]  

   data = np.loadtxt('data.csv', delimiter = ',')
    X = data[:,:-1]    #取所有行,取列到倒数第一列前面的那一列
    y = data[:,-1]     #取所有行的倒数第一列

    regression_coef = miniBatchGD(X, y)

 

 

https://blog.youkuaiyun.com/mingyuli/article/details/81604795

 

https://cloud.tencent.com/developer/news/55147

 

python矩阵numpy中array的冒号 逗号

https://blog.youkuaiyun.com/Strive_0902/article/details/78225691?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task

 

从机器学习学python(三)

——数组冒号取值与extend

(原创内容,转载请注明来源,谢谢)

一、数组冒号取值

1、小白级别

python的特有取值方式,假设数组a = [0,1,2,3,4],则:

b=a[:3]表示b取数组a第四个元素之前的元素,即b=[0,1,2]

c=a[:-1]则表示取a最后一个元素前面的所有元素,即c=[0,1,2,3]

原理是因为冒号前面带的可以省略掉。

2、困难级别

b=array(

[

[

[ 0, 1, 2, 3],

[4, 5, 6, 7],

[8, 9, 10, 11]

],

[

[12, 13, 14, 15],

[16, 17,18, 19],

[20, 21, 22, 23]

]

]

)

即,b是三维数组,每个维度上的元素个数分别是2、3、4,在不用冒号取值的情况下,b[0][0][0]即表示第一个元素,b[0]表示取b数组第一个维度上的第一个数组元素。

当使用冒号取值,规则为:【第1维起点:终点:步长,第2维...,第3维】

取出整个b数组的写法为b[0:2:1,0:3:1, 0:4:1],拿第一维举例,0:2:1,表示对于第一维而言,取起点第1个元素(数组下标是)、终点第2个元素(终点下标是1)、步长是1(即每个元素都取,如果写2表示隔一个元素取一个元素)。另外可以看到,这里最后取到的值,是包含了起点的元素,但是不包含终点的元素。

3、大师级别

还是用上面的数组b。

1)步长为1可以省略,b[0:2:,0:3:, 0:4:]和上面的b[0:2:1, 0:3:1, 0:4:1]等效(注:当然和步长一起的冒号也可以省略,成如下格式b[0:2, 0:3, 0:4],为了便于理解我们还是先保留这个冒号)

2)终点为自然终点,可以省略,b[0::, 0::, 0::](注:可以省略成b[0:,0:,0:],不能省略成b[0,0,0])

3)起点为自然起点,可以省略,b[::,::,::](注:可以省略成b[:,:,:],不能省略成b[,,])

4、骨灰级

b[::,::,::],最右边的,如果都是省略形式,那么也可以省略,从右边开始省略,先是冒号省略b[::,::,],然后是逗号省略b[::,::],依次b[::,],b[::],b[:](注:不能省略成b[]),最后就是省略成b了。

如果右边不是简略形式,就不能省略,像b[::,::,::2]就不能省略成b[,,::2]

如果想成左边开始省略的,前面可以加...即b[..., ::2]

5、个人体会

这种东西,建议写的时候最好不要用省略,实在想用一定要写注释,不然过两天自己都不知道在写什么了。

写这个的主要目的在于,有的书上会涉及到省略形式。

二、extend与append

1.append()

向列表尾部追加一个新元素,列表只占一个索引位,在原有列表上增加

2.extend()

向列表尾部追加一个列表,将列表中的每个元素都追加进来,在原有列表上增加

3.+

直接用+号看上去与用extend()一样的效果,但是实际上是生成了一个新的列表,存这两个列表的和,只能用在两个列表相加上。(即需要写出C=A+B,单纯写式子A+B,则没有变量来保存结果)

4.+=

效果与extend()一样,向原列表追加一个新元素,在原有列表上增加。

综上,对于一个数组x,要把下标是index的元素(index在x的范围内)抽走,返回剩下的元素,可以如下方式:

y=x[:index]

y.extend(x[index+1:])

——written by linhxx 2018.01.06

  • 发表于: 2018-01-06
  • 原文链接:http://kuaibao.qq.com/s/20180106B09EBH00?refer=cp_1026
<think>好的,我现在要解决的问题是解释“[::, -1]”这个表达式的含义。首先,我需要确定用户是在什么编程语言或上下文中遇到这个表达式的。因为不同的语言可能会有不同的语法,所以这一步很重要。 常见的支持类似切片操作的语言是Python,尤其是在处理NumPy数组或Pandas数据结构时。用户提到的方括号和冒号,让我联想到Python中的切片语法。例如,在Python中,arr[a:b:c]表示从a到b,步长为c的切片。而逗号通常用于多维数组的索引,比如在NumPy中,arr[:, 0]表示选择所有行的第0列。 接下来,用户的问题中的“[::, -1]”看起来可能有些书写错误,因为在Python中,多维切片应该用逗号分隔不同维度。例如,arr[::, -1]可能会被写成arr[:, -1],其中第一个冒号表示所有行,-1表示最后一列。但是,这里的双冒号::”是否有特殊含义呢? 在Python中,切片语法是[start:stop:step],所以双冒号意味着使用默认的start和stop,但指定step。例如,arr[::2]会每隔一个元素取一个。那么,如果写成arr[::, -1],这里可能第一个维度用了默认的start、stop和step(即所有元素),第二个维度取-1索引。不过,在Python中,逗号前的切片应该是每个维度的切片,所以正确的写法应该是arr[:, -1],即第一个维度全选,第二个维度取最后一列。而用户的问题中的写法多了个冒号,可能是笔误? 或者,用户可能是在其他上下文中看到这样的写法,比如在某些特定库或框架中的语法?例如,在MATLAB中,冒号用于全选,但索引方式不同。不过,MATLAB使用圆括号而不是方括号,所以可能性较小。 另一个可能性是,用户看到的可能是某种字符串处理或列表解析中的操作。例如,Python中的列表切片,但结合了多个维度。例如,一个二维列表,使用[::, -1]可能试图获取所有行的最后一列,但正确的语法应该是[:, -1],而[::, -1]中的冒号可能实际上被解释为第一个维度的全选,但带有默认的步长,这可能和单个冒号效果相同。例如,在NumPy中,arr[::, -1]和arr[:, -1]的结果是一样的,因为第一个冒号默认start=0,stop=数组长度,step=1,而双冒号中的空值也会被解释为默认值,所以可能用户写的时候多打了一个冒号,但实际效果一样。 因此,可能的结论是,这个表达式出现在PythonNumPy或Pandas中,用于获取多维数组的所有行的最后一列元素。正确的写法应该是[:, -1],而[::, -1]可能是误写,但实际效果相同。或者,在某些情况下,用户可能想在第一维度中使用步长,比如[::-1, -1],这样会反转第一维度的顺序,然后取最后一列。 需要进一步验证这个可能性。例如,在Python中: import numpy as np arr = np.array([[1,2,3], [4,5,6], [7,8,9]]) print(arr[:, -1]) # 输出 [3 6 9] print(arr[::, -1]) # 同上,因为:::在这里等效 print(arr[::-1, -1]) # 输出 [9 6 3],即反转行后取最后一列 因此,如果用户的问题是[::, -1],则实际效果与[:, -1]相同,但如果步长被设置为其他值,比如-1,则会反转顺序。所以需要确认用户的具体意图,是否有笔误,或者是否想反转维度。 总结来说,用户的问题中的“[::, -1]”很可能是在多维数组(如NumPy数组)中,用于选择所有元素的第一维(行),并使用默认步长(通常为1),然后在第二维中取最后一个元素(列)。但因为第一个维度中的冒号写法可能多余,可能实际是笔误,应为[:, -1]。不过,在Python中,两者的效果是相同的,因为arr[::, -1]会被解释为第一个维度全选,步长1,所以结果与[:, -1]一样。 另外,需要考虑到用户可能的其他上下文,比如在某些框架中的特定语法,但最常见的情况还是Python中的多维数组切片操作。因此,回答应集中在Python的切片语法,特别是NumPy的应用,并指出可能的笔误情况,以及不同步长的效果。</think>在编程中,`[::, -1]` 这种语法通常出现在 **PythonNumPy 或多维数组操作**中,用于对多维数据进行索引或切片。以下是逐步解释: --- ### 1. **语法结构解析** - **`::`**:在切片操作中表示**全选某个维度**,等效于 `:`。例如: - `arr[:]` 表示选取数组所有元素; - `arr[::]` 也等效于全选,但可扩展用于指定步长(如 `arr[::2]` 表示每隔一个元素选取一次)。 - **`,`**:用于分隔不同维度的索引。例如,二维数组中 `arr[行索引, 列索引]`。 - **`-1`**:表示**最后一个元素**(Python 中负数索引从末尾开始计数)。 --- ### 2. **具体含义** - **`[::, -1]`** 可理解为: 1. **第一维度(如行)全选**(`::` 等效于 `:`); 2. **第二维度(如列)选择最后一个元素**(`-1`)。 - 例如,对二维数组 `arr = [[1,2,3], [4,5,6], [7,8,9]]`: ```python arr[::, -1] # 结果: [3, 6, 9] ``` --- ### 3. **常见应用场景** - **提取最后一列**:在数据处理中,常用于获取表格或矩阵的最后一列数据。 - **多维数组操作**:适用于 NumPy 数组、Pandas DataFrame(需配合 `.iloc` 或 `.values` 使用)。 --- ### 4. **注意事项** - 若写成 `[::-1, -1]`,则第一维度会**逆序选取**(步长为 `-1`),再取最后一列。例如: ```python arr[::-1, -1] # 结果: [9, 6, 3] ``` - 在原生 Python 列表中,多维索引需分层操作(如 `arr[i][j]`),但 NumPy 支持直接多维索引 `arr[i, j]`。 --- ### 总结 `[::, -1]` 的作用是: **全选第一维度的所有元素,并选取第二维度的最后一个元素**。 通常用于高效提取多维数据(如矩阵最后一列)。若语法书写有误(如多写冒号),实际效果可能与 `[:, -1]` 相同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值