我有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)])
关于如何加快速度的任何想法都将受到高度赞赏
答案 0 :(得分:1)
我可能已经部分解决了这个问题,具体取决于你的目标。以下代码将数组arr简化为仅包含相关指标的1d数组。然后,您可以在不考虑不需要的位置的情况下进行所需的计算
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),然后重新塑造到适当的形状。重塑是numpy的恒定时间。不可否认,我还没有想出一个快速的numpy方法来创建new_index数组。
希望它有所帮助。