我们可以从 ndarray 中获取想要的任何子集。通常,在机器学习中,你需要使用切片拆分数据,例如将数据集拆分为训练集、交叉验证集和测试集。
一、访问元素
我们可以通过索引和方括号[] 访问和修改ndarray中的数据。
import numpy as np
arr = np.arange(10)
print("arr={}".format(arr))
print('arr第一个元素={}'.format(arr[0]))
print('arr第二个元素={}'.format(arr[1]))
print('arr倒数第一个元素={}'.format(arr[-1]))
print('arr倒数二个元素={}'.format(arr[-2]))
运行结果:
arr=[0 1 2 3 4 5 6 7 8 9]
arr第一个元素=0
arr第二个元素=1
arr倒数第一个元素=9
arr倒数二个元素=8
从秩为2的ndarray中获取元素
import numpy as np
arr = np.arange(10).reshape(2, 5)
print("arr={}".format(arr))
print('arr第一行的元素={}'.format(arr[0]))
print('arr第一行第二列元素={}'.format(arr[0][1]))
运行结果:
arr=[[0 1 2 3 4]
[5 6 7 8 9]]
arr第一行的元素=[0 1 2 3 4]
arr第第一行第二列元素=1
二、修改元素
import numpy as np
arr = np.arange(10)
print("arr={}".format(arr))
#第一个元素重新赋值
arr[0] = 100
print("arr={}".format(arr))
运行结果:
arr=[0 1 2 3 4 5 6 7 8 9]
arr=[100 1 2 3 4 5 6 7 8 9]
修改秩为2的ndarray
import numpy as np
arr = np.arange(10).reshape(2, 5)
print("arr={}".format(arr))
#修改一行二列的元素为100
arr[0][1] = 100
print("arr={}".format(arr))
运行结果:
arr=[[0 1 2 3 4]
[5 6 7 8 9]]
arr=[[ 0 100 2 3 4]
[ 5 6 7 8 9]]
三、ndarray删除元素
np.delete(ndarray, elements, axis) 函数删除元素。此函数会沿着指定的轴从给定 ndarray 中删除给定的元素列表。对于秩为 1 的 ndarray,不需要使用关键字 axis。对于秩为 2 的 ndarray,axis = 0 表示选择行,axis = 1 表示选择列。
import numpy as np
# 创建秩为1的ndarray
arr_1 = np.array([1, 2, 3, 4, 5])
# 创建秩为2的ndarray
arr_2 = np.array([[1,2,3],[4,5,6],[7,8,9]])
print('修改的前的arr_1={}\n'.format(arr_1))
print('修改的前的arr_2={}\n'.format(arr_2))
#删除arr_1 的第一个元素和第五个元素
arr_1 = np.delete(arr_1, [0, 4])
print('修改的后的arr_1={}\n'.format(arr_1))
#删除arr_2的第一行
arr_2_1 = np.delete(arr_2, 0, axis=0)
#删除arr_2的第一行和第三列
arr_2_2 = np.delete(arr_2, [0, 2], axis=1)
print('arr_2_1 = {}\n'.format(arr_2_1))
print('arr_2_2 = {}\n'.format(arr_2_2))
运行结果:
修改的前的arr_1=[1 2 3 4 5]
修改的前的arr_2=[[1 2 3]
[4 5 6]
[7 8 9]]
修改的后的arr_1=[2 3 4]
arr_2_1 = [[4 5 6]
[7 8 9]]
arr_2_2 = [[2]
[5]
[8]]
四、append追加元素
import numpy as np
# 创建秩为1的ndarray
x = np.array([1, 2, 3, 4, 5])
print('修改前的arr={}'.format(x))
#使用append追加单个元素
x = np.append(x, 6)
print('第一次修改后的arr={}'.format(x))
#使用append追加多个元素
x = np.append(x, [7, 8])
print('第二次修改后的arr={}'.format(x))
运行结果:
修改前的arr=[1 2 3 4 5]
第一次修改后的arr=[1 2 3 4 5 6]
第二次修改后的arr=[1 2 3 4 5 6 7 8]
添加行列
import numpy as np
#创建秩为2的ndarray
arr = np.array([[1, 2, 3], [4, 5, 6]])
print('修改前的arr={}\n'.format(arr))
#使用append 添加一行 axis = 0 表示添加行
v = np.append(arr, [[7, 8, 9]], axis=0)
print('添加一行的v={}\n'.format(v))
#使用append 添加一列 axis = 1 表示添加列
q = np.append(arr, [[9], [10]], axis=1)
print('添加一列的q={}\n'.format(q))
运行结果:
修改前的arr=[[1 2 3]
[4 5 6]]
添加一行的v=[[1 2 3]
[4 5 6]
[7 8 9]]
添加一列的q=[[ 1 2 3 9]
[ 4 5 6 10]]
五、insert插入元素
import numpy as np
arr = np.array([1, 2, 5, 6, 7])
arr_2 = np.array([[1, 2, 3], [7, 8, 9]])
print('修改前的arr={}\n'.format(arr))
# 在arr的第三个位置 插入 3 和 4
arr = np.insert(arr, 2, [3, 4])
print('修改后的arr={}\n'.format(arr))
print('修改前的arr_2={} \n'.format(arr_2))
#在arr_2的第2行插入[4, 5, 6]
w = np.insert(arr_2, 1, [4, 5, 6], axis=0)
print('修改后的w={} \n'.format(w))
#在arr_2的第2列插入[10, 11]
v = np.insert(arr_2, 1, [10, 11], axis=1)
print('修改后的v={} \n'.format(v))
运行结果:
修改前的arr=[1 2 5 6 7]
修改后的arr=[1 2 3 4 5 6 7]
修改前的arr_2=[[1 2 3]
[7 8 9]]
修改后的w=[[1 2 3]
[4 5 6]
[7 8 9]]
修改后的v=[[ 1 10 2 3]
[ 7 11 8 9]]
六、vstack和hstack 堆叠ndarray
可以使用 np.vstack() 函数进行垂直堆叠,或使用 np.hstack() 函数进行水平堆叠。请务必注意,为了堆叠 ndarray,ndarray 的形状必须相符。
import numpy as np
arr_1 = np.array([1, 2])
arr_2 = np.array([[3, 4], [5, 6]])
print('arr_1 = {}\n'.format(arr_1))
print('arr_2 = {}\n'.format(arr_2))
#使用vstack垂直堆叠arr_1 和 arr_2
z = np.vstack((arr_1, arr_2))
print('z = {}\n'.format(z))
t = np.array([[2], [1]])
# 使用hstack水平堆叠arr_2 和 t
w = np.hstack((arr_2, t))
print('w = {}\n'.format(w))
运行结果:
arr_1 = [1 2]
arr_2 = [[3 4]
[5 6]]
z = [[1 2]
[3 4]
[5 6]]
w = [[3 4 2]
[5 6 1]]