对2D Numpy数组的特定子集进行计算的最有效/Python方法



下面是任务的分解:

1) 我有一个197x10 2D numpy数组。我扫描并确定感兴趣的特定细胞(选择这些细胞的标准并不重要。)这些细胞不局限于基质的一个特定区域。

2) 我有3247个其他2D Numpy数组具有相同的维度。对于这些其他阵列中的单个阵列,我需要取步骤1)指定的感兴趣的单元位置,并取所有这些的平均值(将它们相加,除以感兴趣的细胞位置的数量。)

3) 我需要对其余3246个阵列中的每一个重复2)。

在3247个阵列中,"标记"感兴趣的细胞并快速查看它们的最佳/最有效方法是什么?

--较小集合上的样本

假设给定一个2x2阵列:

[1,2]
[3,4]

也许感兴趣的细胞是包含1和4的细胞。因此,对于以下阵列:

[5,6]
[7,8]

[9,10]
[11,12]

我想把(5+8)/2记录在某个地方
我也想把(9+12)/2记录在某个地方。

编辑

现在,如果我想通过以下标准以蟒蛇的方式(使用Numpy)找到这些感兴趣的细胞:

-从第一行开始,检查第一个元素
-继续向下移动该列中的行,标记满足条件的元素
-在第一个不满足条件的元素上停止,然后转到下一列。

所以基本上,现在我只想保持行(对于特定列)感兴趣的连续单元格。因此,对于1),如果数组看起来像:

[1 2 3]  
[4 5 6]  
[7 8 9]

1,4,2,8和3是感兴趣的,我只标记1,4、2、3,因为5取消了8的资格。

Python方式:

answers = []
# this generates index matrix where the condition is met.
idx = np.argwhere( your condition of (1) matrix comes here)
for array2d in your_3247_arrays:
    answer = array2d[idx].mean()
    answers.append()
print(answers)

下面是一个例子:

import numpy as np
A = np.random.rand(197, 10)
B = np.random.rand(3247, 197, 10)
loc = np.where(A > 0.9)
B[:, loc[0], loc[1]].mean(axis=1)

最新更新