📅  最后修改于: 2023-12-03 14:46:38.426000             🧑  作者: Mango
在Python数据科学和数值计算的领域,NumPy是一种常用的库,它提供了许多用于数组操作的函数,其中之一是numpy.put
。在本文中,我们将介绍numpy.put
的用途,如何使用它以及一些示例。
numpy.put(a, ind, v, mode='raise')
函数基于索引值将给定的值v
赋值给数组a
。索引值可以是一个整数、整数列表、切片对象,也可以是一个布尔数组。
a
:目标数组ind
:数组的索引值v
:值或值列表, 要放到目标数组中mode
:表示如何处理超过数组范围的索引,mode取值可以是raise
,wrap
和clip
下面的示例演示如何使用numpy.put
将一个对角线添加到2x2的数组中,更改mode
的值使得在超出数组范围的情况下得到不同的结果:
import numpy as np
arr = np.zeros((2, 2))
diag = [1, 2]
# 用mode='raise',当超出数组范围时引发异常
np.put(arr, [0, 3], diag, mode='raise')
print(arr)
# 用mode='wrap',当超出数组范围时将超出索引的值“包裹”到数组的另一侧
np.put(arr, [0, 3], diag, mode='wrap')
print(arr)
# 用mode='clip',当超出数组范围时截断值
np.put(arr, [0, 3], diag, mode='clip')
print(arr)
输出:
array([[1., 0.],
[0., 2.]])
array([[1., 0.],
[0., 1.]])
array([[1., 0.],
[0., 2.]])
可以将numpy.put
用于多维数组,如下例演示如何将指定列表中的值插入形状为(2, 2, 2)
的数组中:
import numpy as np
arr = np.zeros((2, 2, 2), dtype=int)
lst = [1, 2, 3, 4, 5, 6]
np.put(arr, [0, 1, 2, 3, 4, 5], lst)
print(arr)
输出:
array([[[1, 2],
[3, 4]],
[[5, 6],
[0, 0]]])
numpy.put
还支持布尔索引,如下例演示如何将数组中所有大于2的值变为2:
import numpy as np
arr = np.array([[0, 1, 2], [3, 4, 5]])
np.put(arr, arr > 2, 2)
print(arr)
输出:
array([[0, 1, 2],
[2, 2, 2]])
使用numpy.put
可以将任意形状的值数组放入目标数组行中的下标列表指定的位置。下面的例子说明如何按行指定1-D数组中的值以构建2-D数组:
import numpy as np
arr = np.zeros((2, 2))
ind = [0, 2]
v = [1, 2, 3]
np.put(arr, ind, v)
print(arr)
输出:
array([[1., 0.],
[2., 3.]])
在NumPy中,numpy.put
函数被用于基于索引值为数组赋值。numpy.put
的API和示例非常好理解和使用,程序员们在日常开发中可以考虑使用numpy.put
来简化自己的工作。