我有一个大的 2D 位置数据字段,以两个数组的形式给出,其中 .我想返回索引数组,该数组被一个名为 的 N x N 数组掩蔽。那是。该数组仅由 s 和 s 组成。xylen(x) == len(y)idx_masked(x[idx_masked], y[idx_masked])intmaskmask[x[idx_masked], y[idx_masked]] == 1mask01
我想出了以下解决方案,但它(特别是下面的最后一行)非常慢,因为我有N x N = 5000 x 5000,重复1000次:
import numpy as np
import matplotlib.pyplot as plt
# example mask of one corner of a square
N = 100
mask = np.zeros((N, N))
mask[0:10, 0:10] = 1
# example x and y position arrays in arbitrary units
x = np.random.uniform(0, 1, 1000)
y = np.random.uniform(0, 1, 1000)
x_bins = np.linspace(np.min(x), np.max(x), N)
y_bins = np.linspace(np.min(y), np.max(y), N)
x_bin_idx = np.digitize(x, x_bins)
y_bin_idx = np.digitize(y, y_bins)
idx_masked = np.ravel(np.where(mask[y_bin_idx - 1, x_bin_idx - 1] == 1))
plt.imshow(mask[::-1, :])
plt.scatter(x, y, color='red') plt.scatter(x[idx_masked], y[idx_masked], color='blue')
有没有更有效的方法来做到这一点?
MM们
相关分类