我有一个表示空间中光源的阵列,如下所示:
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])