我有一个 np.ndarray
,其中的数字表示感兴趣的点,我对值为 1 和 9 的点感兴趣。
现在它们正在被提取:
maskindex.append(np.where(extract.variables['mask'][0] == 1) or np.where(megadatalist[0].variables['mask'][0] == 9))
xval = maskindex[0][1]
yval = maskindex[0][0]
我需要将这些 x 和 y 值应用于我正在操作的数组,以加快速度。
我有 140 个数组,每个数组的尺寸为 734 x 1468,我需要为每个字段计算平均值、最大值、最小值、标准差。我希望有一种简单的方法来应用屏蔽数组来加速操作,现在我只是在整个数组上这样做:
Average_List = np.mean([megadatalist[i].variables['analysed_sst'][0] for i in range(0,Numbers_of_datasets)], axis=0)
Average_Error_List = np.mean([megadatalist[i].variables['analysis_error'][0] for i in range(0,Numbers_of_datasets)], axis=0)
Std_List = np.std([megadatalist[i].variables['analysed_sst'][0] for i in range(0,Numbers_of_datasets)], axis=0)
Maximum_List = np.maximum.reduce([megadatalist[i].variables['analysed_sst'][0] for i in range(0,Numbers_of_datasets)])
Minimum_List = np.minimum.reduce([megadatalist[i].variables['analysed_sst'][0] for i in range(0,Numbers_of_datasets)])
任何有关如何加快速度的想法将不胜感激
最佳答案
我可能已经部分解决了这个问题,具体取决于您的目标。以下代码将数组 arr 简化为仅包含相关索引的一维数组。然后您可以进行所需的计算,而无需考虑不需要的位置
arr = np.array([[0,9,9,0,0,9,9,1],[9,0,1,9,0,0,0,1]])
target = [1,9] # wanted values
index = np.where(np.in1d(arr.ravel(), target).reshape(arr.shape))
no_zeros = arr[index]
在此阶段,“您所需要做的就是”将值“no_zeros”重新插入到“index”中给出的索引上具有适当形状的零数组上。一种方法是展平索引数组并重新计算索引,以便它们与展平的 arr 数组匹配。然后使用 numpy.insert(np.zeroes(arr.shape),new_index,no_zeroes) 然后 reshape 为适当的形状。在 numpy 中, reshape 是常数时间。不可否认,我还没有找到一种快速的 numpy 方法来创建 new_index 数组。
希望有帮助。
关于python - 应用掩码来加速各种数组计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26484848/