您的位置:首页 > 编程语言 > Python开发

Numpy 切片和索引

2020-03-23 09:59 169 查看

3 月,跳不动了?>>>

数组的轴

a= np.arange(24).reshape((2, 3, 4))
print(a)
print(a.ndim) #数组的维度,即轴
print(a.shape) #数组的形状
输出:
[[[ 0  1  2  3]
[ 4  5  6  7]
[ 8  9 10 11]]

[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
3
(2, 3, 4)

根据索引取得数组的元素

  • 下标是整数
  • 下标是列表
  • 下标是数组
b = np.logspace(1, 3, 12).reshape(3, 4)
print(b)
print(b.shape)
#下标是整数
print(b[0])
print(b[1][2])
#下标是列表的形式获取元素
print(b[[0, 1]])

输出:
[[  10.           15.19911083   23.101297     35.11191734]
[  53.36699231   81.11308308  123.28467394  187.38174229]
[ 284.80358684  432.87612811  657.93322466 1000.        ]]
(3, 4)
[10.         15.19911083 23.101297   35.11191734]
123.28467394420659
[[ 10.          15.19911083  23.101297    35.11191734]
[ 53.36699231  81.11308308 123.28467394 187.38174229]]

与列表一样,对于数组而言, 每个索引对应的值可以通过索引(下标)进行修改。

数组的切片

基本切片是Python中基本切片概念到n维的扩展,通过start,stop和step参数提供给内置函数的slice函数来构造一个Python slice对象,此slice对象被传递给数组来提取数组的一部分。

通过切片操作得到的数组和原数组共享一个内存空间,公用一个视图,当其中一个进行修改后,另一个也随之修改。

import numpy as np

a = np.arange(10)
print(a)# [0 1 2 3 4 5 6 7 8 9]
s = slice(2, 7, 2)
print(s)# slice(2, 7, 2)
print(a[s])# [2 4 6]

b = a[2:7:2]
print(b)# [2 4 6]

# 对单个元素进行切片
b = a[5]
print(b)# 5

# 对始于索引的元素进行切片
print(a[2:])# [2 3 4 5 6 7 8 9]

# 对索引之间的元素进行切片
print(a[2:5])# [2 3 4]

# 二维数组
# 最开始的数组
import numpy as np

a = np.array([[1, 2, 3], [3, 4, 5], [4, 5, 6]])
print('我们的数组是:')
print(a)
print ('\n')
# 这会返回第二列元素的数组:
print ('第二列的元素是:')
print(a[..., 1])
print('\n')
# 现在我们从第二行切片所有元素:
print ('第二行的元素是:')
print(a[1, ...])
print('\n')
# 现在我们从第二列向后切片所有元素:
print ('第二列及其剩余元素是:')
print(a[..., 1:])
输出:
[0 1 2 3 4 5 6 7 8 9]
slice(2, 7, 2)
[2 4 6]
[2 4 6]
5
[2 3 4 5 6 7 8 9]
[2 3 4]
我们的数组是:
[[1 2 3]
[3 4 5]
[4 5 6]]

第二列的元素是:
[2 4 5]

第二行的元素是:
[3 4 5]

第二列及其剩余元素是:
[[2 3]
[4 5]
[5 6]]

通过切片操作得到的数组和原数组共享一个内存空间,公用一个视图,当其中一个进行修改后,另一个也随之修改。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  NumPy