迭代稀疏numpy数组的快速方法,但仅限于元素为1的情况



我有一个表示空间中光源的阵列,如下所示:

source2D = np.zeros((256, 256)) 

其中任意数量的像素=1。我有一个例子是一个点源,它由生成

source2D[126:128, 126:128] = 1

我正在运行一个蒙特卡罗模拟,从数组的每一个值为1的部分发射一条射线。目前,我正在对整个数组进行迭代,但只挑选array=1的元素并对其进行迭代会节省大量时间。我应该补充一点,这个函数应该接受一个通用的256x256,其中任何元素都可以设置为1,所以裁剪数组不是一个选项。做这件事最快的方法是什么?我也在使用tensorflow,所以如果有使用它的实现,那也是的一个选项

现在我的代码看起来像这样:

while pc < 1000000:
pc+=1

# Randomize x and y as coordinates on source
x = np.random.randint(0, source2D.shape[0])  # 0 to 255 for this example
y = np.random.randint(0, source2D.shape[1])  # 0 to 255 for this example
# Shoot raycast from x,y to point on detector

用hpaulj的注释解决:

source2D = np.zeros((256, 256))  # Testing with point source
source2D[126:128, 126:128] = 1
nonzero_entries = np.nonzero(source2D)
i = np.random.choice(nonzero_entries[0]) 
j = np.random.choice(nonzero_entries[1])  

相关内容

  • 没有找到相关文章

最新更新