Numpy:如何在数组中每个元素都乘以一个常数
在本文中,我们将介绍如何使用numpy中的方法来将数组中的每个元素乘以一个常数。
阅读更多:Numpy 教程
生成数组
首先,我们需要生成一个数组。可以使用numpy中的np.array()方法生成数组。例如,我们可以生成一个3×3的随机数组:
import numpy as np
# 生成3x3随机数组
arr = np.random.rand(3, 3)
print(arr)
结果:
[[0.66823972 0.44933214 0.18981945]
[0.83492835 0.14220208 0.73205255]
[0.59854209 0.51506319 0.45615824]]
将每个元素乘以常数
要将数组中的每个元素乘以一个常数,可以使用numpy中的np.multiply()方法。这个方法的参数包含两个数组,它将这两个数组逐元素相乘。因此,我们可以用一个数作为一个数组,并将数组与常数相乘来将常数乘以数组的每个元素。以下是一个示例:
# 将数组中的每个元素乘以2
arr_times_two = np.multiply(arr, 2)
print(arr_times_two)
结果:
[[1.33647945 0.89866428 0.37963891]
[1.6698567 0.28440416 1.46410509]
[1.19708418 1.03012638 0.91231647]]
我们也可以将数组中的每个元素乘以一个小数。例如:
# 将数组中的每个元素乘以0.5
arr_times_half = np.multiply(arr, 0.5)
print(arr_times_half)
结果:
[[0.33411986 0.22466607 0.09490972]
[0.41746418 0.07110104 0.36602628]
[0.29927104 0.2575316 0.22807912]]
此外,我们还可以将多个数组逐元素相乘。以下是一个示例:
# 生成一个和arr大小相同的全1数组
ones_arr = np.ones((3, 3))
# 将arr和全1数组逐元素相乘
arr_times_ones = np.multiply(arr, ones_arr)
print(arr_times_ones)
结果:
[[0.66823972 0.44933214 0.18981945]
[0.83492835 0.14220208 0.73205255]
[0.59854209 0.51506319 0.45615824]]
在上面的示例中,我们实际上是将arr和一个全为1的数组ones_arr相乘,这相当于将arr的每个元素乘以1。
更改原始数组
如果想要直接修改原始数组而不是创建一个新的数组,可以在调用np.multiply()方法时将原始数组作为第一个参数。例如:
# 原始数组
arr = np.random.rand(3, 3)
print("原始数组:")
print(arr)
# 将原始数组中的每个元素乘以0.5
np.multiply(arr, 0.5, out=arr)
print("更新后的数组:")
print(arr)
结果:
原始数组:
[[0.35247077 0.83198532 0.65645893]
[0.31056259 0.69525548 0.39098883]
[0.77496349 0.4047901 0.45382007]]
更新后的数组:
[[0.17623539 0.41599266 0.32822947]
[0.1552813 0.34762774 0.19549441]
[0.38748174 0.20239505 0.22691004]]
在上面的示例中,我们将原始数组作为第一个参数传递给np.multiply()方法,并使用out参数指定更新后的数组。这将使原始数组直接被修改,而没有创建新的数组。
广播
当使用不同大小的数组进行逐元素操作时,numpy采用广播机制。简单来说,广播是一种将不同形状的数组在运算时扩展成相同形状的方法。例如,我们想要将一个大小为2x2x3的数组乘以一个大小为1x2x1的数组,numpy将会先对第二个数组进行广播,将其扩展为2x2x3的形状,然后再进行逐元素相乘。
以下是一个具体的例子:
# 生成一个大小为2x2x3的数组
arr = np.random.randn(2, 2, 3)
print("数组arr:")
print(arr)
# 生成一个大小为1x2x1的数组
b = np.array([[[2], [3]]])
print("数组b:")
print(b)
# 对两个数组进行乘法运算
arr_times_b = np.multiply(arr, b)
print("乘法运算结果:")
print(arr_times_b)
结果:
数组arr:
[[[-0.27226399 -0.51012261 0.85574833]
[ 0.34127651 -0.41498035 -0.18638751]]
[[ 0.09046458 -0.08846897 -0.75448361]
[ 1.43255913 -1.25633268 1.20876494]]]
数组b:
[[[2]
[3]]]
乘法运算结果:
[[[-0.54452798 -1.02024521 1.71149665]
[ 1.02382954 -1.24494106 -0.55916253]]
[[ 0.18092915 -0.17693794 -1.50896722]
[ 4.29767739 -3.76899804 3.62629484]]]
在上面的示例中,数组b先被广播扩展为2x2x3的形状,然后再逐元素和arr相乘。
总结
在本文中,我们介绍了如何使用numpy中的方法将数组中的每个元素乘以一个常数。我们还展示了如何修改原始数组以及广播机制的应用。这些技巧可以帮助我们更高效地进行numpy数组的操作,提高我们的工作效率。
极客笔记