5、numpy——切片和索引

 1、一维数组

1.1 一维数组很简单,基本和列表一致。ndarray 数组可以基于 0 - n 的下标进行索引。

  切片对象可以通过内置的 slice 函数,并设置 start, stop 及 step 参数进行,从原数组中切割出一个新数组。

  通过冒号分隔切片参数 start:stop:step 来进行切片操作:

1 import numpy as np
2 arr = np.arange(10)  #类似于list的range()
3 # 通过内置函数slice切片
4 s = slice(2, 10, 2)
5 print(arr[s])
6 # 通过冒号切片参数直接切片
7 print(arr[2:10:2])

 

 

结果:

[2 4 6 8]
[2 4 6 8]

 

2.2 冒号 : 的解释:

如果只放置一个参数,如 [2],将返回与该索引相对应的单个元素。如果为 [2:],表示从该索引开始以后的所有项都将被提取。如果使用了两个参数,如 [2:7],那么则提取两个索引(不包括停止索引)之间的项。

 

 1 >>> import numpy as np
 2 >>> a = np.arange(10)
 3 >>> a
 4 array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
 5 >>> a[5]
 6 5
 7 >>> a[5:]
 8 array([5, 6, 7, 8, 9])
 9 >>> a[2:6]
10 array([2, 3, 4, 5])
11 >>>

 

 

 

2.3 列表切片与数组ndarray切片的区别

  区别在于数组切片是原始数组视图(这就意味着,如果做任何修改,原始都会跟着更改)。这也意味着,如果不想更改原始数组,我们需要进行显式的复制,从而得到它的副本(.copy())。

1 import numpy as np
2 arr_old = arr.copy()
3 arr[0:6] = 2
4 print('arr={}\narr_old={}'.format(arr,arr_old))

 

结果:

arr=[2 2 2 2 2 2 6 7 8 9]
arr_old=[0 1 2 3 4 5 6 7 8 9]

 

 2、二维数组

 二维数组中,各索引位置上的元素不再是标量,而是一维数组

1 import numpy as np
2 arr = np.array([[1, 2, 2], [4, 5, 6], [7, 8, 9]])
3 print(arr, '\n', arr[1][2])

 

结果:

[[1 2 2]
 [4 5 6]
 [7 8 9]] 
 6

 

 

咱们当做一个平面直角坐标系。

相当于arr1[x,y],x相当于行数,y相当于列数(必须声明,图中x和y标反了,但不影响理解)。

 3、多维数组

先说明下reshape()更改形状:

np.reshape(a,newshape,order='C')

a:array_like以一个数组为参数。

newshape:intortupleofints。整数或者元组

顺便说明下,np.reshape()不更改原数组形状(会生成一个副本)。

1 import numpy as np
2 arr1 = np.arange(1, 13)
3 arr2 = arr1.reshape(2, 2, 3)
4 print(arr1, arr2)

 

结果:

[ 1  2  3  4  5  6  7  8  9 10 11 12] [[[ 1  2  3]
  [ 4  5  6]]

 [[ 7  8  9]
  [10 11 12]]]

 

 其实多维数组就相当于:

row * col * 列中列

 

 

 

import numpy as np
arr1 = np.arange(1, 13)
arr2 = arr1.reshape(2, 2, 3)
print(arr2[1][1])
print(arr2[1][1][0])

 

结果:

[10 11 12]
10

 

转载于:https://www.cnblogs.com/weststar/p/11573141.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值