Numpy05 --- 切片和索引及数据的修改

文章目录

    • 测试代码
    • 切片 slice
    • 索引
      • 布尔索引
      • 条件索引
    • 数组元素的修改
    • 数组元素的增添
      • append
      • insert
    • 数组元素的删除
      • delete
    • 数组元素去重
      • unique

测试代码

import numpy as np

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

切片 slice

numpy中的切片和python列表中的切片操作相似
可以从大数组中切出小数组

# 取第二行
print(arr[1])

# 取第二列
print(arr[:,1])

Numpy05 --- 切片和索引及数据的修改_第1张图片

# 取连续多行
print(arr[2:])

# 取连续多列
print(arr[:,2:])

Numpy05 --- 切片和索引及数据的修改_第2张图片

# 取不连续行或者列
# 取1、3行
print(arr[[0,2]])
# 取1、3列
print(arr[:,[0,2]])

Numpy05 --- 切片和索引及数据的修改_第3张图片

# 取多行多列
# 取第二行第二列
print(arr[1,1])
# 取第一行到第二行及第二列到第三列
print(arr[1:,1:])

Numpy05 --- 切片和索引及数据的修改_第4张图片

# 使用步长
# 每隔一行一列取
print(arr[0:3:2,0:3:2])

Numpy05 --- 切片和索引及数据的修改_第5张图片

索引

通过切片可以获取指定的值,说明切片也是一种索引

布尔索引

# 布尔索引
print(arr<5)
# 取小于5的数据
print(arr[arr<5])

Numpy05 --- 切片和索引及数据的修改_第6张图片

条件索引

python中多个条件用and或者or
但numpy中需要用&或者 |

import numpy as np

# 三维数组
arr = np.array(
    [[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]]
)
print(arr)
print("*"*15)

arr = arr[(arr>3) & ( arr<6)]
print(arr)

Numpy05 --- 切片和索引及数据的修改_第7张图片

数组元素的修改

通过索引获取到指定位置的值,然后直接将其替换

# 把5替换为0
arr[1,1] = 0
print(arr)

Numpy05 --- 切片和索引及数据的修改_第8张图片

数组元素的增添

append

在数组末尾追加元素

numpy.append(arr, values, axis=None)

参数 作用
arr 需要修改的数组
values 增添的数据,必须和原数组形状相同
axis 默认为 None,横向,返回一维数组,0则沿0轴方向增添元素,1则沿1轴方向增添元素
arr = np.append(arr,[0,0,0])
print(arr)

Numpy05 --- 切片和索引及数据的修改_第9张图片

# 沿0轴添加元素
arr = np.append(arr,[[0,0,0]],axis=0)
print(arr)

print("*"*15)

# 沿1轴添加元素
arr = np.append(arr,[[0],[0],[0],[0]],axis=1)
print(arr)

Numpy05 --- 切片和索引及数据的修改_第10张图片

insert

沿指定轴将值插入到指定下标之前

np.insert(arr, obj, values, axis)

参数 作用
arr 需要修改的数组
obj 在其之前插入值的索引
values 插入的数据,必须和原数组形状相同
axis 0则沿0轴方向插入元素,1则沿1轴方向插入元素 ,若没有指定,则展开数组
print(arr)
print("*"*15)
# 沿0轴插入,在第一行后面
arr = np.insert(arr,1,[9,9,9],axis=0)
print(arr)

print("*"*15)

# 沿1轴插入,在第一列后面
arr = np.insert(arr,1,[0,0,0,0],axis=1)
print(arr)

Numpy05 --- 切片和索引及数据的修改_第11张图片

数组元素的删除

delete

按照指定条件删除数组的指定元素

np.delete(arr, obj, axis)

参数 作用
arr 需要修改的数组
obj 在其之前插入值的索引
values 插入的数据,必须和原数组形状相同
axis 0则沿0轴方向插入元素,1则沿1轴方向插入元素 ,若没有指定,则展开数组
# 删除第一行
arr = np.delete(arr,0,axis=0)

Numpy05 --- 切片和索引及数据的修改_第12张图片

# 删除第一列
arr = np.delete(arr,0,axis=1)

Numpy05 --- 切片和索引及数据的修改_第13张图片

数组元素去重

unique

去除数组中的重复元素,最后返回一个列表

np.unique(
arr, return_index=False, return_inverse=False, return_counts=False, axis=None)

参数 作用
arr 需要处理元素
return_index 默认为false,true则返回新列表元素在旧列表中的位置(下标),列表顺序
return_inverse 默认为false,true则返回旧列表元素在新列表中的位置(下标),列表顺序
return_counts 默认为false,true则返回各个元素出现的次数
axis 默认无,0则沿0轴方向插入元素,1则沿1轴方向插入元素 ,若没有指定,则展开数组
import numpy as np

arr = np.array(
    [[1, 2, 7],
    [4, 1, 6],
    [7, 8, 9]]
)
print(arr)
print("*"*15)
# 去重
arr = np.unique(arr)
print(arr)

Numpy05 --- 切片和索引及数据的修改_第14张图片

import numpy as np

arr = np.array(
    [[1, 2, 7],
    [4, 1, 6],
    [7, 8, 9]]
)
print(arr)
print("*"*15)
# 去重
arr, index, inverse, counts = np.unique(arr,return_index=True,return_inverse=True,return_counts=True)
print(arr)
print("*"*15)
print(index)
print(inverse)
# 打印各个元素出现次数
print(counts)

Numpy05 --- 切片和索引及数据的修改_第15张图片

你可能感兴趣的:(#,Numpy)