详解NumPy数组切片中冒号与负号的用法
本文深入解析NumPy数组切片中冒号(:)与负号(-1)的核心作用。冒号用于选取当前维度的所有子模块,而负号表示从后往前计数,-1特指最后一个元素。通过具体代码示例,展示如何结合两者进行多维数组的精准索引与数据提取,帮助开发者避免维度混淆,提升数据处理效率。
在使用NumPy库进行数据处理时,开发者经常需要利用冒号(:)和负号(-1)来访问或操作数组元素。由于NumPy支持多维数组,初学者往往容易对维度的划分和索引规则产生困惑。
从整体逻辑来看,冒号(:)的主要功能是选取当前指定维度下的所有子模块或元素。
负号(-)用于表示从后往前计数的元素,其中“-1”特指当前维度中最后一个子模块或元素。
为了直观理解上述规则,以下测试代码展示了具体应用:
import numpy as np
b = np.arange(start=0, stop=24, dtype=int)
print('b.shape', b.shape)
# b.shape (24,)
b1 = b.reshape((4, 2, 3))
print('the value of b1\n', b1)
# the value of b1
# [[[ 0 1 2]
# [ 3 4 5]]
#
# [[ 6 7 8]
# [ 9 10 11]]
#
# [[12 13 14]
# [15 16 17]]
#
# [[18 19 20]
# [21 22 23]]]
print('b1[-1]\n', b1[-1])
# 从最外层的维度分解出最后一个模块
# b1[-1]
# [[18 19 20]
# [21 22 23]]
for a in b1[-1]:
print('s')
# 在这个模块中有两个小的模块,所以程序运行两次
# s
# s
print('b1[:-1]\n', b1[:-1])
# 从最外层的模块中分解出除最后一个子模块后其余的模块
# b1[:-1]
# [[[ 0 1 2]
# [ 3 4 5]]
#
# [[ 6 7 8]
# [ 9 10 11]]
#
# [[12 13 14]
# [15 16 17]]]
for a1 in b1[:-1]:
print('s')
# 在这个模块中有三个小的模块,所以程序运行两次
# s
# s
# s
print('b1[-1:]\n', b1[-1:])
# 写在最后一个维度的":"没有实质性作用,此处表示的意思和b1[-1]相同
# b1[-1:]
# [[[18 19 20]
# [21 22 23]]]
print('b1[:,-1]\n', b1[:, -1])
# 表示取出最外层的所有维度后每一个子模块中选择最后一个子模块
# b1[:,-1]
# [[ 3 4 5]
# [ 9 10 11]
# [15 16 17]
# [21 22 23]]
print('b1[:,:,-1]\n', b1[:, :, -1])
# 表示取最里层维度的最后一个元素重新组成新的元组
# b1[:,:,-1]
# [[ 2 5]
# [ 8 11]
# [14 17]
# [20 23]]
以上内容总结了NumPy数组中冒号与负号的基本用法,希望能为读者提供有价值的参考。如果您觉得有用,欢迎继续支持本站获取更多技术分享。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













