gpt4 book ai didi

python - 如何根据条件有效地将函数应用于数组中的值?

转载 作者:行者123 更新时间:2023-11-28 22:28:18 25 4
gpt4 key购买 nike

我有一个这样的数组 arorg:

import numpy as np
arorg = np.array([[-1., 2., -4.], [0.5, -1.5, 3]])

和另一个数组 values 如下所示:

values = np.array([1., 0., 2.])

values 的条目数与 arorg 的列数相同。

现在我想将函数应用于条目或 arorg,具体取决于它们是正数还是负数:

def neg_fun(val1, val2):
return val1 / (val1 + abs(val2))

def pos_fun(val1, val2):
return 1. / ((val1 / val2) + 1.)

因此,val2arorgval1 中的(绝对)值 - 这是棘手的部分 - 来自 values ;如果我将 pos_funneg_fun 应用于 arorg 中的 i 列,val1 应该是值[i]

我目前的实现方式如下:

ar = arorg.copy()

for (x, y) in zip(*np.where(ar > 0)):
ar.itemset((x, y), pos_fun(values[y], ar.item(x, y)))

for (x, y) in zip(*np.where(ar < 0)):
ar.itemset((x, y), neg_fun(values[y], ar.item(x, y)))

这给了我想要的输出:

array([[ 0.5       ,  1.        ,  0.33333333],
[ 0.33333333, 0. , 0.6 ]])

由于我必须经常进行这些计算,所以我想知道是否有更有效的方法来执行此操作。有点像

np.where(arorg > 0, pos_fun(xxxx), arorg)

会很棒,但我不知道如何正确传递参数(xxx)。有什么建议吗?

最佳答案

正如问题中所暗示的,这是一个使用 np.where 的问题.

首先,我们使用函数实现的直接转换来为正例和负例生成值/数组。然后,使用正值掩码,我们将使用 np.where 在这两个数组之间进行选择。

因此,实现看起来像这样——

# Get positive and negative values for all elements
val1 = values
val2 = arorg
neg_vals = val1 / (val1 + np.abs(val2))
pos_vals = 1. / ((val1 / val2) + 1.)

# Get a positive mask and choose between positive and negative values
pos_mask = arorg > 0
out = np.where(pos_mask, pos_vals, neg_vals)

关于python - 如何根据条件有效地将函数应用于数组中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43633774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com