- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现 Jump Flooding 算法以从一组点绘制 Voronoi 图。下面的代码工作正常,但对于大 N 来说非常慢。它慢的原因是有一个循环向正在迭代的数组添加新信息。该数组列出了相邻点。如果我不包括此附加内容,则 Voronoi 图是无意义的,算法无法达到大多数点。我不明白为什么在原始邻居搜索中识别出的邻居的简单扫描不会击中网格上的所有点。您能否建议我的代码有什么问题,以及是否有一种高效的替代方法可以将所有找到的邻居附加到一个巨大的数组中?或者这可能只是一个 python 问题,用 C/C++ 等重写将解决性能问题?
import matplotlib.pyplot as plt
import numpy as np
from time import time
# array = np.zeros((5, 5))
# originalSeeds = {1: [2, 2], 2: [4, 1], 3: [0, 4]}
array = np.zeros((10, 10))
originalSeeds = {1: [2, 2], 2: [4, 1], 3: [0, 4]}
# array = np.zeros((200, 200))
# originalSeeds = {1: [20, 20], 2: [40, 10], 3: [0, 40]}
for key, value in originalSeeds.items():
array[value[0], value[1]] = key
seeds = {1: [], 2: [], 3: []}
# this is constantly updated list of neighbors
colors = [1, 2, 3]
colorvalues = {1: 1, 2: 2, 3: 3}
# plt.imshow(array)
# plt.show()
start = time()
step = 2**(int(np.log2(array.shape[0])))
def distance(crd1, crd2):
return np.linalg.norm(crd1 - crd2)
while step >= 1:
for color in colors:
originalSeedCoords = originalSeeds[color]
# neighbor displacments
disp = step * np.array([[1, 1], [0, 1], [-1, 1], [1, -1], [1, 0], [-1, -1], [0, -1], [-1, 0]])
for element in disp:
center = originalSeeds[color]
idx = center + np.array(element)
if idx[0] > array.shape[0] - 1 or idx[1] > array.shape[1] - 1 or idx[0] < 0 or idx[1] < 0:
continue
else:
if array[idx[0], idx[1]] == color:
continue
elif array[idx[0], idx[1]] == 0:
array[idx[0], idx[1]] = colorvalues[color]
seeds[color].append(list(idx))
else:
currColor = array[idx[0], idx[1]]
if distance(idx, originalSeeds[color]) < distance(idx, originalSeeds[currColor]):
array[idx[0], idx[1]] = colorvalues[color]
seeds[color].append(list(idx))
else:
array[idx[0], idx[1]] = colorvalues[currColor]
seeds[currColor].append(list(idx))
for color in colors:
for seed in seeds[color]: # this list may grov during iteration, filling in uncharted points
for element in disp:
center = seed
idx = center + np.array(element)
if idx[0] > array.shape[0] - 1 or idx[1] > array.shape[1] - 1 or idx[0] < 0 or idx[1] < 0:
continue
else:
if array[idx[0], idx[1]] == color:
continue
elif array[idx[0], idx[1]] == 0:
array[idx[0], idx[1]] = colorvalues[color]
if list(idx) not in seeds[color]:
seeds[color].append(list(idx))
else:
currColor = array[idx[0], idx[1]]
if distance(idx, originalSeeds[color]) < distance(idx, originalSeeds[currColor]):
array[idx[0], idx[1]] = colorvalues[color]
if list(idx) not in seeds[color]:
seeds[color].append(list(idx))
else:
array[idx[0], idx[1]] = colorvalues[currColor]
if list(idx) not in seeds[currColor]:
seeds[currColor].append(list(idx))
step = step // 2
# step -= 1
最佳答案
跳跃泛洪算法是为 GPU 设计的,该算法在所有像素上并行执行,并使用乒乓缓冲区来存储最后一次传递的结果。它不应该以诸如顺序的方式使用,更不要说在 Python 中实现了。
关于python - 带有跳跃泛洪算法的 Voronoi 图 : performance issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68656974/
我是 websocket 的新手,我在 web 应用程序上实现了 websocket,服务器端是用 java 编写的,客户端是 javascript。服务器通过 websocket 向客户端发送通知。
我的网站有一个 Javascript 方法,可以发出 AJAX 请求将商品添加到购物车,而无需重新加载页面和发出简单的通知。 AddToCart() 但是,使用任何 Javascript 控制台,我
我正在尝试在两台 ubuntu 机器之间进行 TCP SYN 泛洪(我正在使用 virtualbox,并且我确实在机器之间进行了 ping)。 我得到的错误是 ERROR setting IP_HDR
我希望我的 Apache 2 网络服务器因 TCP Syn Flood 攻击而拒绝服务。 我将 Kali Linux 与 MSF 结合使用来关闭我的 Web 服务器。但我的网络服务器似乎并不关心这个。
我是一名优秀的程序员,十分优秀!