numpy数组的访问

本文详细介绍了Python内置的list操作以及NumPy库中数组的使用,包括切片、倒序、截取等基本操作,并展示了在二维数组上的应用。通过实例演示了如何选取特定元素、行列截取及组合等技巧,对于理解和掌握Python数据处理有重要作用。
python 自带的list
list1 = list(range(20))
print(list1)

list2 = list1[1:10:2]#从开始下标1开始截取,下标到10结束,间隔2个
print(list2)
#从1 取到尾 间隔两个
list2 = list1[1::2]

print(list2)

print('=======numpy======')
import numpy as np

一维数组

arr1 = np.array(range(20))
print(arr1)

#取13579--与python自带list一样
#切片
print(arr1[1:10:2])
#倒序
arr2 = arr1[::-1]
print(arr2)

二维数组

arr3 = np.array([range(1,6),range(6,11),range(11,16)])
print(arr3)

#取用
print(arr3[0][1])
print(arr3[0,1])

#横向截取
print(arr3[0][1:4])
print(arr3[0,1:4])
#纵向截取
print(arr3[::2])

#截取2 4 7 9 12 14
print(arr3[::,1::2])

print('==============')
print(arr3)

案例

'''
1 3
6 8
11 13
'''
print(arr3[::,0:3:2])
'''
1 5
6 10
11 15
'''
print(arr3[::,0::4])
'''
2
7
12
'''
print(arr3[::,1:2])
'''
4 3 2
9 8 7
14 13 12
'''
print(arr3[::,-2:-5:-1])
'''
4 14
2 12
'''
print(arr3[::2,1:5:2].T[::-1])
print(arr3[::2,3:0:-2].T)

### 使用 Numpy 访问数组元素的方法 Numpy 提供了多种方式来访问数组中的元素。以下是几种常见的方法及其具体实现: #### 方法一:通过索引访问单个元素 可以使用方括号 `[]` 和索引来获取特定位置的元素。需要注意的是,Numpy 的索引是从 0 开始的[^2]。 ```python import numpy as np arr = np.array([10, 20, 30, 40, 50]) print("第一个元素:", arr[0]) # 输出: 第一个元素: 10 print("最后一个元素:", arr[-1]) # 输出: 最后一个元素: 50 ``` 对于多维数组,可以通过逗号分隔的形式指定每个维度上的索引。 ```python multi_dim_arr = np.array([[1, 2], [3, 4]]) print("第 0 行第 1 列的元素:", multi_dim_arr[0, 1]) # 输出: 第 0 行第 1 列的元素: 2 ``` --- #### 方法二:遍历整个数组 如果需要逐一遍历数组中的每一个元素,可以利用 `.flat` 属性或者嵌套循环的方式完成[^3]。 ##### 使用 `.flat` 遍历 `.flat` 是一个多维数组的一维迭代器,能够简化遍历过程。 ```python import numpy as np arr = np.array([[1, 2], [3, 4]]) for element in arr.flat: print(element) # 输出依次为:1, 2, 3, 4 ``` ##### 嵌套循环遍历 也可以手动编写嵌套循环来逐一访问二维或多维数组中的元素。 ```python for row in arr: for elem in row: print(elem) # 输出同样为:1, 2, 3, 4 ``` --- #### 方法三:使用 `np.nditer()` 进行高效迭代 当处理较大规模的数据时,推荐使用 `np.nditer()` 来提高效率并支持更多高级功能[^4]。 ```python import numpy as np a = np.arange(0, 6).reshape(2, 3) # 默认按 C 风格顺序(行优先) for x in np.nditer(a): print(x, end=" ") # 输出: 0 1 2 3 4 5 print("\n") # 修改为 Fortran 风格顺序(列优先) for x in np.nditer(a, order='F'): print(x, end=" ") # 输出: 0 3 1 4 2 5 ``` 还可以设置标志位以控制行为,比如外部循环模式。 ```python for x in np.nditer(a, flags=['external_loop']): print(x, end=" ") # 结果可能因优化而改变排列形式 ``` --- #### 方法四:广播机制下的联合迭代 如果有两个或多个形状兼容的数组,则可通过广播机制同时迭代它们[^5]。 ```python import numpy as np a = np.arange(3) b = np.arange(6).reshape(2, 3) for x, y in np.nditer([a, b]): print(f"{x}:{y}", end=" ") # 输出: 0:0 1:1 2:2 0:3 1:4 2:5 ``` 上述例子展示了如何同步访问两个数组中的对应元素。 --- ### 总结 以上介绍了四种主要的 Numpy 数组元素访问方法,分别是基于索引的直接访问、扁平化迭代、`nditer` 工具以及广播机制辅助的多重数组联合迭代。每种方法都有其适用场景,在实际开发过程中可以根据需求灵活选用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值