2D numpy.ndarray 将列元素与一行中的 2 个相邻元素进行比较会加速吗?

问题描述 投票:0回答:1

从 astropy 我得到 2D numpy.ndarray 数据形状:(2016, 3040) 这是一个6Mpx的阵列 我想在 3040 列中搜索缺陷。

我对列错误的定义是 n
列 500 次 “单元格”(m,n) 的值比单元格 m,n-2 AND m,n+2 小 50 个单位,其中 m 为 0.... 2016 我在迭代行 m

时计算 result_array 中的出现次数

有效,错误被正确识别——但速度很慢。 因为我想处理 20-40 张图像,然后再纠正列缺陷。所以时间是个问题。

在这种蛮力方法之前,我正在试验 column.mean() 函数。 这不适合检测坏柱。 我仍然不检查缺陷是否从 m、m+1、m+2 连续出现。 只是计算并假设列错误是在批准时。一列中 25% 的像素显示的值(此处为 50)明显低于相邻像素。

有一个名为 fixfits 的工具,由 Sander Pool 创建。 Sander Pool 提供的这个工具不再可用。我担心 sander Pool 已经去世了。 对于即将推出的 Windows 版本,您永远不知道它是否适用于未来版本。

如何加快处理速度的一些想法numpy 受到高度赞赏。

这是数据结构

数据分类: 数据形状:(2016, 3040) 例如一行:[ 0 1446 1402 ... 1347 1421 0] 行的形状:(3040,)

这是我的 Python 代码

import numpy as np
row_index =0
col_index =0
row_max = 2016
col_max = 3040
threshold_intensity = 50
result_array= np.zeros(col_max)

for x in range(2,col_max-2):
    for y in range( 1, row_max-1):
        compare =  data[y,x] + 50 #threshold_intensity
        if ((compare < data[y,x-2]) and (compare < data[y,x+2])):
            result_array[x] = result_array[x]+1
            if result_array[x] >500 :
                print("Index: "+ str(x))
                break

            
for i in range(1,500):
    print (str(i)+"  :" + str(result_array[i]))

学习 astroy、numpy 和 Python 论坛

python numpy-ndarray astropy
1个回答
0
投票

如果你的唯一目标是消除循环,我想你可以这样做

compare = data + threshold_intensity
mask = (compare < np.roll(data, -2, axis=-1) & (compare < np.roll(data, 2, axis=-1)
result_array = mask.sum(axis=0)
© www.soinside.com 2019 - 2024. All rights reserved.