一、基本切片操作
切片对象由冒号( )分隔:的三个参数组成:开始索引、结束索引和步长。
(1)开始索引:切片的起始位置,默认为0。
(2)结束索引:切片的结束位置(不包括该位置的元素)。
(3)步长:用于选择元素的间隔,默认为1。

代码示例:
import numpy as np
arr1 = np.arange(10)
print( arr1 )
# 从哪个元素到要求的元素
print( arr1[ 1 : 3]) # 从索引[1]开始,切到索引[3]之前
print( arr1[ 1 : ]) # 从索引[1]开始,切到结尾
print( arr1[ : 3]) # 从数组开头开始,切到索引[3]之前
# 切除数组的开头与结尾
print( arr1[ 2 : -2]) # 切除开头 2 个和结尾 2 个
print( arr1[ 2 : ]) # 切除开头 2 个
print( arr1[ : -2]) # 切除结尾 2 个
# 隔几个元素采样一次
print( arr1[ : : 2 ]) # 每 2 个元素采样一次
print( arr1[ : : 3 ]) # 每 3 个元素采样一次
print( arr1[ 1 : -1 : 2 ]) # 切除一头一尾后,每 2 个元素采样一次
输出的结果:
[0 1 2 3 4 5 6 7 8 9]
[1 2]
[1 2 3 4 5 6 7 8 9]
[0 1 2]
[2 3 4 5 6 7]
[2 3 4 5 6 7 8 9]
[0 1 2 3 4 5 6 7]
[0 2 4 6 8]
[0 3 6 9]
[1 3 5 7]
二、进阶切片操作
(1)在多维数据仓库中选择,可以使用多个切片对象来特定维度的子集。维度都可以有自己的切片对象。
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 选择第一行的所有列
sub_arr1 = arr[0,:]
sub_arr2 = arr[1,:]
print(sub_arr1)
print(sub_arr2)
输出的结果:
[1 2 3]
[4 5 6]
(2)使用布尔数据库来创建条件切片,只需选择满足条件的元素。
import numpy as np
arr = np.array([0, 1, 2, 3, 4, 5])
# 选择大于2的元素
condition = arr > 2
sub_arr = arr[condition]
print(sub_arr)
输出的结果:[3 4 5]
三、举例操作
import sys, os
sys.path.append(os.pardir)
import numpy as np
from dataset.mnist import load_mnist
from two_layer_net import TwoLayerNet
# 读入数据
(x_train, t_train), (x_test, t_test) = \ load_mnist(normalize=True, one_
hot_label = True)
network = TwoLayerNet(input_size=784, hidden_size=50, output_size=10)
x_batch = x_train[:3]
t_batch = t_train[:3]
grad_numerical = network.numerical_gradient(x_batch, t_batch)
grad_backprop = network.gradient(x_batch, t_batch)
# 求各个权重的绝对误差的平均值
for key in grad_numerical.keys():
diff = np.average( np.abs(grad_backprop[key] - grad_numerical[key]) )
print(key + ":" + str(diff))
这行代码从训练数据x_train集中选择了前3个样本,将它们存储x_batch在变量中。这通常用于构建一个小型训练批次(mini-batch),以便在神经网络训练中使用。
具体来说:(1)x_train是训练数据集,通常包含多个样本,每个样本是一个输入数据。
(2)x_train[:3]使用切片操作,选择了前3个样本。切片操作[:3]表示从数据集的开始位置取出前3个元素(样本)。
所以,x_batch现在包含了训练数据集中的前3个样本。这个小批量通常用于神经网络的训练,一次输入多个样本以更新权重和计算损失。这有助于提高训练的效率和稳定性。
本文详细解读了Numpy的切片功能,展示了在处理多维数据和实现神经网络训练中的应用。
8909





