【Numpy】(3)数组操作

索引

基本索引

NumPy索引类似于Python列表的索引,但它提供了更多的功能。对于一维数组,你可以使用整数索引访问特定位置的元素:

import numpy as np

arr = np.array([1, 2, 3, 4])
print(arr[2])  # 输出:3

对于多维数组,你可以使用逗号分隔的索引元组来访问元素:

arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr[1, 2])  # 输出:6

切片索引

切片是Python和NumPy中一种常用的数据访问方式,允许你访问数组的一部分:

arr = np.array([0, 1, 2, 3, 4, 5])

# 获取索引1到4之前的元素
print(arr[1:4])  # 输出:[1 2 3]

# 获取从开始到索引3(不包含)的元素
print(arr[:3])  # 输出:[0 1 2]

# 获取索引2到末尾的元素
print(arr[2:])  # 输出:[2 3 4 5]

对于多维数组,你可以对每个维度分别进行切片:

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 获取第一行
print(arr[0, :])  # 输出:[1 2 3]

# 获取第一列
print(arr[:, 0])  # 输出:[1 4 7]

# 获取子数组(2x2,从arr[1:, 1:]开始)
print(arr[1:, 1:])  # 输出:
# [[5 6]
#  [8 9]]

布尔索引

布尔索引允许你根据布尔数组的值来索引目标数组,这在条件筛选数据时非常有用:

arr = np.array([0, 1, 2, 3, 4, 5])

# 创建一个布尔数组
bool_arr = arr > 2

# 使用布尔数组进行索引
print(arr[bool_arr])  # 输出:[3 4 5]

# 直接使用布尔表达式
print(arr[arr > 2])  # 输出:[3 4 5]

花式索引

花式索引(Fancy indexing)允许你使用整数数组作为索引:

arr = np.array([0, 1, 2, 3, 4, 5])

# 使用整数数组索引
print(arr[[1, 3, 4]])  # 输出:[1 3 4]

对于多维数组,花式索引可以让你访问数组的任意位置,甚至以非常灵活的方式重排数组:

arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 获取(0,1)、(1,2)和(2,0)位置的元素
print(arr[[0, 1, 2], [1, 2, 0]])  # 输出:[2 6 7]

注意事项

  • NumPy索引是从0开始的。
  • 切片是原数组的视图,修改切片会影响原数组。如果需要复制,可以使用.copy()方法。
  • 布尔索引和花式索引返回的数组不与原数组共享数据。

改变形状

numpy.reshape是NumPy库中的一个非常重要的函数,它允许你重新排列给定数组的维度,而不改变数组中的数据。这意味着你可以将任何形状的数组转换成你需要的任何其他形状,只要新形状的总元素数与原始数组相同。

reshape函数的基本语法如下:

numpy.reshape(a, newshape, order='C')
  • a:要被重塑的数组。
  • newshape:整数或整数元组,指定了新数组的形状。如果newshape是整数,则结果将是一维数组。特别地,newshape可以为-1,在这种情况下,值会自动计算以保持数组元素的总数不变。
  • order:{‘C’, ‘F’, ‘A’},可选。指定重塑操作和数组数据在内存中的读写顺序。'C’意味着C风格的顺序,'F’意味着Fortran风格的顺序,'A’意味着如果a是Fortran连续的,在重塑过程中也应该保持Fortran连续。

示例1:基础重塑

将一维数组重塑为二维数组:

import numpy as np

arr = np.arange(6)
print("Original array:", arr)

# 重塑为2x3数组
reshaped_arr = arr.reshape((2, 3))
print("Reshaped array:\n", reshaped_arr)

示例2:自动计算维度

使用-1自动计算维度,让NumPy自动确定正确的维度:

arr = np.arange(6)

# 只指定行数,列数自动计算
reshaped_arr = arr.reshape((2, -1))
print("Reshaped array with -1:\n", reshaped_arr)

示例3:从多维到一维

将多维数组重塑为一维数组:

arr = np.array([[1, 2, 3], [4, 5, 6]
  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游码客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值