Python - NumPy数组中用零替换负值
在本文中,我们将了解如何用零替换负值。如果我们谈论数据分析,那么处理负值是确保有意义的计算的关键步骤。因此,在这里您将学习各种方法,我们可以用这些方法将负值替换为0。
方法1. 使用遍历和列表推导式。
示例
import numpy as np arr = np.array([-12, 32, -34, 42, -53, 88]) arr = [0 if x < 0 else x for x in arr] arr = np.array(arr) print("array with replaced values is: ", arr)
输出
array with replaced values is: [ 0 32 0 42 0 88]
解释
在上面的示例中,我们使用列表推导式方法遍历NumPy数组arr中的每个元素。在遍历数组时,我们检查当前值是否为负(x<0),如果是,则将其替换为零,否则我们将不更改它。修改后,我们将数组转换回NumPy数组。
方法2. 使用Numpy.vectorize()。
示例
import numpy as np arr = np.array([-12, 32, -34, 42, -53, 88]) def replace_negative_value(x): return 0 if x < 0 else x replace_func = np.vectorize(replace_negative_value) arr = replace_func(arr) print("array with replaced values is: ", arr)
输出
array with replaced values is: [ 0 32 0 42 0 88]
解释
在上面的示例中,我们使用了函数numpy.vectorize(),它允许我们对NumPy数组的每个元素应用自定义函数。我们定义了一个函数replace_negative_value(),它将用零替换负值。然后使用np.vectorize()方法,我们创建了该函数的矢量化版本,以将其应用于数组。
方法3. 使用Numpy.clip()。
示例
import numpy as np arr = np.array([-12, 32, -34, 42, -53, 88]) arr = np.clip(arr, 0, None) print("array with replaced values is: ", arr)
输出
array with replaced values is: [ 0 32 0 42 0 88]
解释
在上面的示例中,我们使用了numpy.clip()方法,我们可以用它将值限制在任何定义的范围内。在我们的程序中,我们将值0定义为下界,并将None定义为上界,因此它可以接受任何较大的正值,但在负值的情况下,它将把负值替换为0。
方法4. 使用Numpy.where()。
示例
import numpy as np arr = np.array([-12, 32, -34, 42, -53, 88]) arr = np.where(arr < 0, 0, arr) print("array with replaced values is: ", arr)
输出
array with replaced values is: [ 0 32 0 42 0 88]
解释
在上面的示例中,我们使用了numpy.where()方法,我们可以用它提供任何条件替换方法。在我们的程序中,我们提供了条件arr<0,并且我们在该条件为真的情况下用0替换了数组的值。如果条件不满足,则值将保持不变。
方法5. 使用Numpy.maximum()。
示例
import numpy as np arr = np.array([-12, 32, -34, 42, -53, 88]) arr = np.maximum(arr, 0) print("array with replaced values is: ", arr)
输出
array with replaced values is: [ 0 32 0 42 0 88]
解释
在上面的示例中,我们使用了函数numpy.maximum(),它比较两个数组的元素并返回其中的最大值。在我们的程序中,我们正在将数组的每个元素与0进行比较,并选择最大值,这肯定将负值替换为0,因为0将是最大值,因此函数将返回0,并且负值将被0替换。
因此,我们看到了不同的方法,我们可以用这些方法将数组的任何负值替换为0。在本文中,我们了解了诸如遍历、列表推导式、数学运算等方法,这些方法为我们提供了有效替换负值的方法。您可以选择最符合您的需求和可读性的任何方法。