04 ndarray 读取和修改

本文详细介绍了如何使用numpy操作ndarray,包括访问和修改元素、删除元素、追加元素、插入元素以及堆叠ndarray的方法,是进行机器学习数据预处理的重要知识点。

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

我们可以从 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]]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值