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

克莱布

我有一个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.)

由此,val2在(绝对)值arorgval1-这是棘手的部分-来自values; 如果我申请pos_funneg_funiarorgval1应该是values[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)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

应用某些函数后如何有效地计算集合的最大值

条件有效时,熊猫将函数应用于列-较深的版本

如何在Python中有效地将同一操作应用于多个变量?

如何有效地将功能应用于熊猫面板的每个数据框

如何有效地将pos_tag_sents()应用于熊猫数据框

有效地替换应用于numpy数组的vstack +连接

将自定义功能有效地应用于Pandas中的组

将函数有效地应用于numpy数组中的球面邻域

根据位置将功能有效地应用于每个像素

有效地将列中的功能应用于其他列

如何有效地将功能应用于大熊猫数据框的行?

如何通过使用reduce函数有效地评估javascript数组中的元素

在给定转移矩阵的情况下,将转移有效地应用于状态矩阵

多年有效地将增长率应用于初始值以改变增长率

如何有效地将条件应用于numpy数组的索引?

条件有效时,熊猫将函数应用于列

如何有效地将函数逐行应用于NumPy矩阵

将函数应用于numpy数组元素的有效方法?

如何有效地将pandas.Timestamp函数应用于整个数据框/列?

如何将矩阵变换有效地应用于NumPy数组的每一行?

有效地将阈值函数应用于 SciPy 稀疏 csr_matrix

有效地将相同的操作应用于多个 DataFrame

有效地拆分熊猫数据框并将方法应用于子集

将条件函数应用于 Pandas 中按天分组的数据的有效方法

如何有效地将 rbinom 函数应用于数据框中的每一行?

将参数传递给函数时如何定义条件?(在python中更有效地编码)

如何有效地将函数应用于大型熊猫系列?

numpy 的替代方法,用于有效地将条件应用于数组

如何有效地从使用多处理执行的函数中检索返回值?