NumPy是Python中用于处理数组和数值计算的强大库。它提供了多维数组对象(称为numpy.ndarray或简称为数组),Numpy数组的赋值是比较方便的,本文主要介绍Python numpy 数组修改赋值的方法,以及相关示例代码。

1、一般使用索引赋值

赋值方式和C#和Java待语言类似,如下,

import numpy as np
arry = np.zeros((2,5))
arry[1][2] = 1
arry[0][4] = 10
print(arry)

2、使用切片赋值

NumPy中的数组切片是从一个数组中选择子集或特定区域的元素。切片的语法与Python列表切片类似,但更加强大和灵活。

import numpy as np

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

# 选择索引1到4的元素(不包括4)
arr[1:4] = -1
print("*"*36)
print(arr)
# 结果为 [1, 2, 3]
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 选择索引2到末尾的元素
arr[2:] = -2
print("*"*36)
print(arr)
# 结果为 [2, 3, 4, 5, 6, 7, 8, 9]
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 选择索引从开头到3的元素(不包括3)
arr[:3] = -3
print("*"*36)
print(arr)
# 结果为 [0, 1, 2]
arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

# 选择从索引1开始,以步长2选择元素
arr[1::2] = 100
# 结果为 [1, 3, 5, 7, 9]
print(arr)
print("*"*36)
print("*************多维数组切片*************")
arr = np.array([[1, 2, 3, 4, 5], [ 6, 7, 8, 12, 13], [17, 18, 9, 10, 11]])

# 选择第一行的所有元素
arr[0, :] = -1
# 结果为 [1, 2, 3]
print("*"*36)
print(arr)
arr = np.array([[1, 2, 3, 4, 5], [ 6, 7, 8, 12, 13], [17, 18, 9, 10, 11]])

# 选择第二列的所有元素
arr[:, 1] = -2
# 结果为 [2, 5, 8]
print("*"*36)
print(arr)
arr = np.array([[1, 2, 3, 4, 5], [ 6, 7, 8, 12, 13], [17, 18, 9, 10, 11]])

# 选择子矩阵,例如左上角的2x2矩阵
arr[:2, :2] = -3
# 结果为 [[1, 2], [4, 5]]
print("*"*36)
print(arr)
arr = np.array([[1, 2, 3, 4, 5], [ 6, 7, 8, 12, 13], [17, 18, 9, 10, 11]])

# 选择多个元素
arr[[1,2,0],[1,2,4]] = -3
print("*"*36)
print(arr)

3、使用布尔索引赋值

在NumPy中,布尔索引赋值是一种可以使用布尔数组来选择和赋值数组元素,如下,

import numpy as np

arr = np.array([[1, 2, 3, 4, 5], [ 6, 7, 8, 12, 13], [17, 18, 9, 10, 11]])
print(arr)
mask = arr > 10
print(mask)
print("*"*36)
arr[mask] = 0
print(arr)

4、使用numpy.where赋值

NumPy的 numpy.where函数用于根据指定的条件从两个数组中选择元素。相当于Python中的三元运算符,如下,

import numpy as np

# 创建条件数组
condition = np.array([True, False, True, False])

# 创建两个数组
x = np.array([1, 2, 3, 4])
y = np.array([10, 20, 30, 40])

# 根据条件选择元素
result = np.where(condition, x, y)

print(result)

5、使用numpy.clip赋值

numpy.clip是NumPy库中的一个函数,用于将数组中的值限制在指定的范围内。如下,

import numpy as np

arr = np.array([[1, 2, 3, 4, 5], [ 6, 7, 8, 12, 13], [17, 18, 9, 10, 11]])
print(arr)
print("*"*36)
# 将数组中小于2的元素设为2,大于4的元素设为4
clipped_arr = np.clip(arr, 2, 4)

print(clipped_arr)

推荐文档