python - 根据条件和列索引位置应用函数

标签 python numpy

我有一个 2d numpy 数组,我想根据条件并考虑列索引位置对元素应用计算。

条件是:元素值== 0。

如果为 true,我想在该位置计算 10^i(其中 i 是轴 1 的索引),否则为 0。

因此示例数组可以是:

ar = np.array([[  0,  -5,  -5, -11,  -9],
               [  5,   0,   0,  -6,  -4],
               [ 10,   5,   5,  -1,   1]])

结果数组应如下所示(计算指数):

[[  10^0,  0,  0, 0,  0],
 [  0,   10^1,   10^2,  0,  0],
 [ 0,   0,   0,  0,   0]]

我已经做到了:

np.where(ar==0)

鉴于条件为真,我不确定如何将列索引应用为指数。

谢谢!

最佳答案

创建测试数组:

a = np.random.choice(range(-4, 4), size = (3, 4))

# a = array([[ 0, -1, -1, -2],
#            [ 0, -3,  0, -1],
#            [ 0,  3, -2,  0]])

查找 a 为零的索引:

mask = a == 0
indx = np.nonzero(mask)

# indx = (array([0, 1, 1, 2, 2]), array([0, 0, 2, 0, 3]))

更改元素:

a[mask] = 10**(indx[1])
a[~mask] = 0

# a = array([[   1,    0,    0,    0],
#            [   1,    0,  100,    0],
#            [   1,    0,    0, 1000]])

indx 是一个元组,其第二个元素存储二维数组的列索引。

关于python - 根据条件和列索引位置应用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69028895/

相关文章:

python - 当已知字符串中出现的次数为 N 时,查找字符串中重复出现的术语

python - 将 pandas 数据帧行拆分为搜索到的列值到新的数据帧中

python - 来自文本文件的 Numpy 矩阵

python - 当输入是许多相同的数组时,使 np.einsum 更快? (或任何其他更快的方法)

python - 我可以用掩码分割 numpy 数组吗?

python - celery 一个经纪人多个队列和 worker

python - 如何在 python 3.6.2 中使用 suds.client 库?

Python Scrapy Parse 提取的链接与另一个函数

python - 更快地求解由具有多个变量参数的多个非线性方程控制的多个参数的方法?

python - 带有 numpy.maximum 的 Pandas Datetimeindex 给出错误