首页 > 解决方案 > 使用索引向量对特定矩阵元素执行数学运算

问题描述

我想基于 3D 掩码(包含 1 和 0)对 3D 数据集上的特定元素执行简单的操作。我想做的操作是除法,因为我不想将 NaN 引入我的数据集,所以我只想对掩码内的元素执行除法。此外,我将在具有相当大矩阵的大型数据集上执行此操作,因此我想尽可能避免 for 循环。

这是一些代码:

inside_mask = numpy.where(mask_data>0)

这给了我三个 1 x 97442 的向量,其值对应于我的掩码中的一个索引,其中我有一个“一”。即 vector1[0], vector2[0], vector3[0] 是我有一个“一个”的第一个元素。

因此我可以这样做:

for i in range(0,97442):
    row = inside_mask[0][i]
    col = inside_mask[1][i]
    depth = inside_mask[2][i]

    someValue = valueMatrix[row, col, depth]
    calculation[row, col, depth] = signal_data[row, col, depth]/someValue

所以问题很简单:我怎样才能只用元素操作而不用 for 循环来做到这一点?

真诚的,杰斯珀

标签: pythonnumpymatrixindexing

解决方案


import numpy as np

myarr = np.random.randint(2,size=[10,10,10]).astype(float)
someValue  = 3
myarr[myarr>0] = myarr[myarr>0]/someValue

推荐阅读