如何将分段函数应用于2D numpy数组的每个元素

2024-10-02 10:31:23 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个2D numpy数组,比如

arr = array([[0, 0.001 , 0.002], [0.03, 0.04, 0.05], [0.01, 0.002, 0.5], [0.05, 0.8, 0.003]])

我想对它执行一个分段函数,比如

def gammacor(x):
    return np.piecewise(x, [x <= 0.00313, x > 0.00313], [12.92*x, 1.055*x**(1/2.4)-0.055])

gcarr = gammacor(arr)

当我这样做时,我会得到一个错误:

TypeError:NumPy布尔数组索引分配需要0或1维输入,输入有2维

如果我尝试在展平阵列上运行该函数(在运行该函数后,计划将其重塑回nx 3),则会出现以下错误:

ValueError:NumPy布尔数组索引分配无法将3个输入值分配给掩码为true的0输出值

有没有一种简单的方法可以将分段函数应用于2D(或ND)数组的所有元素


Tags: 函数numpyreturndef错误np数组array
1条回答
网友
1楼 · 发布于 2024-10-02 10:31:23

np.piecewise的第三个参数是funclist

它们应该是可调用的:

import numpy as np

arr = np.array([[0, 0.001, 0.002], [0.03, 0.04, 0.05], [0.01, 0.002, 0.5],
                [0.05, 0.8, 0.003]])

p = np.piecewise(arr, [arr <= 0.00313, arr > 0.00313],
                 [lambda v: 12.92 * v,
                  lambda v: 1.055 * v ** (1 / 2.4) - 0.055])

print(p)

输出:

[[0.         0.01292    0.02584   ]
 [0.18974828 0.22091636 0.24780053]
 [0.09985282 0.02584    0.73535698]
 [0.24780053 0.90633175 0.03876   ]]

def gammacor(x):
    return np.piecewise(x, [x <= 0.00313, x > 0.00313],
                        [lambda v: 12.92 * v,
                         lambda v: 1.055 * v ** (1 / 2.4) - 0.055])


gcarr = gammacor(arr)

相关问题 更多 >

    热门问题