Numpy学习之 一维数组元素选取

本文详细解释了NumPy数组中一维数组的元素选取与Python列表的切片操作的区别,包括如何使用整数、负数、切片等方法进行元素选取,并展示了NumPy数组与获取的数据之间共享内存的特性,以及使用整数列表选取数组的操作。同时,通过实例演示了使用负数步长进行数组反转和不同切片形式的选择方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ndarray的一维数组的元素选取与Python列表的切片操作很相似,与列表不同的时,获取的数据组成一个新数组但与原有的数组共享一个内存存储空间,即数据更改获取得到的数据中某个元素的值,原有数组也会产生相应变化。
下面列举其种常见的选取方式
首页使用arange快速创建一个一维数组

#coding=utf-8
import numpy as np
arr1 = np.arange(10)

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

1.使用整数为下标选取数组中的某一个元素

#取第1个元素
print arr1[0] #输出 0

2.使用负数为下标反向选择数据中的某一个元素

#取第1个元素
print arr1[-1] #输出9

3.使用切片做为下标选取数据中一部分

(1) 完整的切片形式

[开始索引:结束索引:步长]
如省略开始索引,则开始索引值为0
如省略结束索引,则结束索引值为数组对应元素最大索引值
如省略步长,则步长值为1

#取索引为0(包含)到索引为2(不包含)之间的元素且步长为1(即第1个和第2个元素)
print arr1[0:2:1] #输出 [0,1]
#取索引为0(包含)到索引为10(不包含)之间的元素且步长为2(即第1、3、5、7、9个元素)
print arr1[0:10:2] #[0 2 4 6 8]

(2) 省略步长

#取索引为0(包含)到索引为2(不包含)之间的元素(即第1个和第2个元素)
print arr1[0:2] #输出 [0,1]

(3) 省略结束索引

#从索引为1的元素且步长为2选取元素
print arr1[1::2] #输出 [1 3 5 7 9]

(4) 省略结束索引和步长

#从索引为1的元素开始选取元素
print arr1[1:] #输出 [1 2 3 4 5 6 7 8 9]
print arr1[1::] #与上面效果相同,输出 [1 2 3 4 5 6 7 8 9]

(5) 省略开始索引

#选取索引为0到2之间
print arr1[:2:1] #输出 [0,1] 这个与arr1[0:2]效果相同

(5) 省略开始索引及步长

#选取索引为0到2之间
print arr1[:2:] #输出 [0,1] 这个与arr1[0:2]效果相同

(6) 省略开始索引及结束索引

#以步长为2选择数组中的元素
print arr1[::2] #输出 [0 2 4 6 8]

4.使用负数步长来翻转数组

#使用负数索引来翻转
print arr1[::-1] #输出[9 8 7 6 5 4 3 2 1 0]
print arr1[::-2] #输出[9 7 5 3 1]

备注:如果是用切片形式选择数组中的一部分元素,会形成一个新的数组(可以通过 type查看)且其与原有数组共享一个内存存储块,如果更改新生成的数组中的元素值,则原有数据对应索引位置的元素的值也会改变,如下列所示

import numpy as np
arr1 = np.arange(10)
print arr1 #输出 [0 1 2 3 4 5 6 7 8 9]
arr2= arr1[2:5]
print arr2 #输出 [2 3 4]
arr2[1]=20
print arr2 #输出 [2 20 4]
print arr1 #输出 [0 1 2 20 4 5 6 7 8 9]

5、使用整数列表选取
使用整数列表对数组进行选取操作时,会将整数列表的值做为下标来选取数组;与使用切片形式做为下标不同的是,选取得到的数组不会与原有数据共享一个内存存储块;即更改得到的新数组值不会影响原有数组

# coding=utf-8
import numpy as np
arr1 = np.arange(10)
print arr1 #输出 [0 1 2 3 4 5 6 7 8 9]
arr2=arr1[[1,1,5,6]]
print arr2 #输出 [1 1 5 6 ]
arr2[0]=-1 #更改得到的新数组值不会影响原有数组
print arr1 #输出 [0 1 2 3 4 5 6 7 8 9]
### 使用 PythonNumPy 对三维数组进行数据预处理 在使用 NumPy 进行三维数组的数据预处理时,可以利用其强大的索引和切片功能来高效地完成各种操作。以下是几个常见的数据预处理方法及其实现: #### 数据初始化与扩展 当需要创建一个固定大小的三维数组并填充初始值时,可使用 `np.zeros` 或 `np.empty` 来预先分配内存[^1]。 ```python import numpy as np # 创建一个形状为 (3, 4, 5) 的零矩阵 array_3d = np.zeros((3, 4, 5)) print(array_3d) # 如果只需要未初始化的空间,则可以用 np.empty 提高效率 uninitialized_array = np.empty((3, 4, 5)) print(uninitialized_array) ``` #### 切片与子集提取 通过切片技术可以从三维数组选取特定部分。例如,可以通过指定维度编号以及范围 `(m:n)` 实现对某一层或多层的操作[^2]。 ```python # 假设我们有一个已知的三维数组 data = np.random.rand(6, 7, 8) # 获取第一个维度上第0号元素对应的二维平面 first_plane = data[0, :, :] print(first_plane.shape) # 输出应为 (7, 8) # 同样也可以获取第二个维度上的某些列 selected_columns = data[:, :3, :] # 取前三个列 print(selected_columns.shape) # 应该得到 (6, 3, 8) # 而第三个维度的部分深度同样适用此逻辑 partial_depths = data[:, :, ::2] # 每隔两个取一次 print(partial_depths.shape) # 结果将是 (6, 7, 4) ``` #### 数组变换 有时为了适应模型输入或其他计算需求,可能需要调整数组结构或者改变其排列顺序。这可通过 `.transpose()` 方法轻松达成。 ```python original_shape = (2, 3, 4) transposed_data = data.transpose(2, 0, 1) # 改变轴的位置 new_shape = transposed_data.shape # 新形狀應為 (4, 2, 3) print(new_shape) ``` #### 归一化或标准化 对于机器学习任务而言,经常要对原始特征做归一化/标准化处理以便提升训练效果。这里展示一种简单的全局归一化方案。 ```python def normalize(data): min_val = np.min(data) max_val = np.max(data) normalized = (data - min_val) / (max_val - min_val) return normalized normalized_data = normalize(data) print(normalized_data) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值