简而言之:
我在Python 2.7中执行Wave Collapse Function算法的实现存在缺陷,但是我无法确定问题所在。我需要帮助来找出我可能会丢失或做错的事情。
什么是波崩函数算法?
它是Maxim Gumin在2016年编写的一种算法,可以从样本图像生成程序模式。您可以在此处(2D重叠模型)和此处(3D切片模型)看到它的实际效果。
实施目标:
将算法(2D重叠模型)简化为本质,并避免原始C#脚本的冗长和笨拙(令人惊讶的是,它很长且难以阅读)。这是尝试使该算法更短,更清晰和pythonic版本。
此实现的特征:
我正在使用处理(Python模式),这是一种用于视觉设计的软件,可简化图像处理(没有PIL,没有Matplotlib等)。主要缺点是我仅限于Python 2.7,并且无法导入numpy。
与原始版本不同,此实现:
算法(据我了解)
1 /读取输入位图,存储每个NxN模式并计数它们的出现。(可选:具有旋转和反射的增强图案数据。)
例如,当N = 3时:
2 /预计算并存储模式之间的所有可能的邻接关系。在下面的示例中,图案207、242、182和125可以与图案246的右侧重叠
3 /创建一个具有输出尺寸的数组(称为Wwave)。这个阵列的每个元素是一个数组保持状态(True的False每个图案的)。
例如,假设我们在输入中计算了326个唯一模式,并且希望输出尺寸为20 x 20(400个单元)。然后,“ Wave”数组将包含400个(20x20)数组,每个数组包含326个布尔值。
开始时,所有布尔值都设置为,True因为在Wave的任何位置都允许使用每个模式。
W = [[True for pattern in xrange(len(patterns))] for cell in xrange(20*20)]
Run Code Online (Sandbox Code Playgroud)
4 /使用输出的尺寸创建另一个数组(称为H)。该数组的每个元素都是一个浮点数,在输出中保留其对应单元格的“熵”值。
此处的熵是指香农熵,它是根据Wave中特定位置的有效模式数量来计算的。单元格的有效模式(True在Wave中设置为)越多,其熵就越高。 …
我需要帮助来实现一个允许生成建筑计划的算法,我最近在阅读Kostas Terzidis教授的最新出版物:排列设计:建筑,文本和上下文(2014)时偶然发现了这一点.
CONTEXT
引用Terzidis教授:
"解决这个问题的一种方法是随机地在网格中放置空格,直到所有空间都合适并且满足约束条件"
上图显示了这样的问题和样本解决方案(f).
算法(如书中简要描述)
1 /"每个空格都与一个列表相关联,该列表包含根据其所需邻域的程度排序的所有其他空格."
2 /"然后从列表中选择每个空间的每个单元,然后逐个放置在站点中,直到它们适合站点并满足相邻条件.(如果失败,则重复该过程)"
九个随机生成计划的示例:
我应该补充一点,作者后来解释说这个算法不依赖于暴力技术.
问题
如您所见,解释相对模糊,第2步相当不清楚(在编码方面).到目前为止我所有的都是"拼图":
每个单位:
基于其实际邻居的健康分数
from random import shuffle
n_col, n_row = 7, 5
to_skip = [0, 1, 21, 22, 23, 24, 28, 29, 30, 31]
site = [i for i in range(n_col * n_row) if i not in to_skip]
fitness, grid = [[None if i in to_skip else [] for i in range(n_col * …Run Code Online (Sandbox Code Playgroud)我是 SAT 求解器的新手,需要一些有关以下问题的指导。
考虑到:
? 我在 4*4 网格中选择了 14 个相邻的单元格
? 我有 5 个多联骨牌(A、B、C、D、E),大小分别为 4、2、5、2 和 1
? 这些多联骨是自由的,即它们的形状不是固定的,可以形成不同的图案。
如何使用 SAT 求解器计算所选区域(灰色单元格)内这 5 个自由多联骨牌的所有可能组合?
借用@spinkus 有见地的答案和 OR-tools 文档,我可以制作以下示例代码(在 Jupyter Notebook 中运行):
from ortools.sat.python import cp_model
import numpy as np
import more_itertools as mit
import matplotlib.pyplot as plt
%matplotlib inline
W, H = 4, 4 #Dimensions of grid
sizes = (4, 2, 5, 2, 1) #Size of each polyomino
labels = np.arange(len(sizes)) #Label of each …Run Code Online (Sandbox Code Playgroud) 我想在具有景深效果的3D画布(处理中)上显示数千个点.更具体地说,我想使用z缓冲区(深度缓冲)来调整point基于其与相机的距离的模糊水平.
到目前为止,我可以提出以下点着色器:
pointfrag.glsl
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
varying vec4 vertColor;
uniform float maxDepth;
void main() {
float depth = gl_FragCoord.z / gl_FragCoord.w;
gl_FragColor = vec4(vec3(vertColor - depth/maxDepth), 1) ;
}
Run Code Online (Sandbox Code Playgroud)
pointvert.glsl
uniform mat4 projection;
uniform mat4 modelview;
attribute vec4 position;
attribute vec4 color;
attribute vec2 offset;
varying vec4 vertColor;
varying vec4 vertTexCoord;
void main() {
vec4 pos = modelview * position;
vec4 clip = projection * pos;
gl_Position = clip + projection * …Run Code Online (Sandbox Code Playgroud) 我在尝试为 Windows 10 机器上的 Jupyter Notebook 设置 pypy3 内核时遇到问题。
按照这 2 个其他相关线程 ( 1 , 2 ) 的说明,我已经使用ipykernel了该命令,pypy3 -m pip install ipykernel但似乎安装在某些时候遇到了错误:
Collecting ipykernel
Using cached ipykernel-5.2.1-py3-none-any.whl (118 kB)
Collecting ipython>=5.0.0
Using cached ipython-7.14.0-py3-none-any.whl (782 kB)
Collecting traitlets>=4.1.0
Using cached traitlets-4.3.3-py2.py3-none-any.whl (75 kB)
Collecting jupyter-client
Using cached jupyter_client-6.1.3-py3-none-any.whl (106 kB)
Collecting tornado>=4.2
Using cached tornado-6.0.4.tar.gz (496 kB)
Requirement already satisfied: setuptools>=18.5 in c:\pypy3\site-packages (from ipython>=5.0.0->ipykernel) (44.0.0)
Collecting jedi>=0.10
Using cached jedi-0.17.0-py2.py3-none-any.whl (1.1 MB)
Collecting decorator
Using …Run Code Online (Sandbox Code Playgroud) 我正在尝试用Python计算Davies-Bouldin 指数。
以下是下面的代码尝试重现的步骤。
5 个步骤:
然后,
最后,
代码
def daviesbouldin(X, labels, centroids):
import numpy as np
from scipy.spatial.distance import pdist, euclidean
nbre_of_clusters = len(centroids) #Get the number of clusters
distances = [[] for e in range(nbre_of_clusters)] #Store intra-cluster distances by cluster
distances_means = [] #Store the mean of these distances
DB_indexes = [] #Store Davies_Boulin index of each pair of cluster
second_cluster_idx = [] #Store index of …Run Code Online (Sandbox Code Playgroud) 我想:
因此整个东西就像一个铰接臂,可以 向右或向左弯曲。
为了尽可能清晰,我制作了一些图表。
我知道我可以:
translate()scale(1, -1)atan2()函数旋转它问题
当将这 3 个结合在一起时,我得到了这样的结果:
旋转角度似乎是正确的,但显然平移有问题(无论是在 X 轴还是 Y 轴上),我无法弄清楚到底是什么。
我怀疑枢轴翻译缺失,或者转换顺序不正确(或者两者都有)。
如果有人能帮助我理解我做错了什么以及如何解决这个问题,我将非常感激。
int W = 40;
int H = 40;
int offset = 10;
float[] p0 = {-W/2, -H/2};
float[] p1 = {-W/2, H/2};
float[] p2 = {W/2, H/2};
float[] p3 = {W/2, -H/2 - offset};
PShape object;
void setup(){
size(600, 600, P2D);
smooth(8); …Run Code Online (Sandbox Code Playgroud) 我有一个用 Python 实现的 Straight Skeleton 算法,并想用它来偏移多边形的边缘。
不幸的是,我看到几篇论文提出了这种抵消方法,但没有一篇提供有关如何实现它的具体信息。他们之中:
由于直骨架的定义基于边缘的连续波前或草火传播,因此它特别适用于多边形偏移。特别是,它可以用来获得所谓的“斜接”偏移,如果角在偏移多边形中保持原样
如果 P 的骨架已知,那么对于任何给定半径 r 的单个偏移曲线的计算是简单、高效(线性时间)和数值稳定的。所要做的就是以某种方式遍历骨架 并逐个插入偏移曲线的元素。
我尝试将每个边的偏移量限制到它们周围的“骨骼”,但发现输出并不令人满意:一些偏移量不匹配,我看到线条应该相互接触的间隙。
(这里质量更高)
问题:使用直骨架计算多边形斜接偏移的正确方法是什么?
考虑以下单索引 DataFrame:
energy fat
1 2000 28
2 1900 17
3 2200 30
4 1750 15
5 1800 18
6 1600 12
Run Code Online (Sandbox Code Playgroud)
我还有一个多索引系列:
1 vitamin-c 0.0004
vitamin-a 0.0150
2 vitamin-c 0.0030
3 vitamin-d 1.2000
vitamin-e 1.0007
vitamin-c 1.2020
4 vitamin-a 0.0780
5 vitamin-b 0.9650
6 vitamin-e 1.9801
vitamin-c 1.0011
Run Code Online (Sandbox Code Playgroud)
我怎样才能将两者结合起来,结果如下所示:
energy fat vitamins
1 2000 28 vitamin-c 0.0004
vitamin-a 0.0150
2 1900 17 vitamin-c 0.0030
3 2200 30 vitamin-d 1.2000
vitamin-e 1.0007
vitamin-c 1.2020
4 1750 15 vitamin-a 0.0780
5 …Run Code Online (Sandbox Code Playgroud) 我想使用量化误差来测量聚类的质量,但找不到有关如何计算此指标的任何明确信息。
我发现的少数文件/文章是:
quantization_error函数(在代码的最后)是用 Python 实现的关于第三个链接(这是迄今为止我找到的最好的信息),我不知道如何解释计算(参见下面的代码片段):
(# 注释是我的。问号表示我不清楚的步骤)
def quantization_error(self):
"""
This method calculates the quantization error of the given clustering
:return: the quantization error
"""
total_distance = 0.0
s = Similarity(self.e) #Class containing different types of distance measures
#For each point, compute squared fractional distance between point and centroid ?
for i in range(len(self.solution.patterns)):
total_distance += math.pow(s.fractional_distance(self.solution.patterns[i], self.solution.centroids[self.solution.solution[i]]), 2.0)
return total_distance / len(self.solution.patterns) # Divide total_distance by the total …Run Code Online (Sandbox Code Playgroud) 我有不同的嵌套列表:
a = [[] for e in range(6)]
b = [[] for e in range(6)]
c = [[] for e in range(6)]
Run Code Online (Sandbox Code Playgroud)
鉴于这些列表具有相似的结构,是否可以同时分配它们(在一行中)?我在想这样的事情:
a, b, c = [[] for e in range(6)] ...?...
Run Code Online (Sandbox Code Playgroud)
我正在使用Python 3
我有一个线增长算法,我需要:
我通常以非常幼稚的方式执行此操作(请参阅下面的代码),并且想知道如何使用 numpy(如果需要的话还可以使用 scipy)以最快的方式计算连续向量之间的距离。
import math
threshold = 10
vectorList = [(0, 10), (4, 8), (14, 14), (16, 19), (35, 16)]
for i in xrange(len(vectorList)):
p1 = vectorList[i]
p2 = vectorList[i+1]
d = math.sqrt((p2[0] - p1[0])**2 + (p2[1] - p1[1])**2)
if d >= threshold:
pmid = ((p1[0] + p2[0]) * .5, (p1[1] + p2[1]) * .5)
vectorList.insert(i+1, pmid)
Run Code Online (Sandbox Code Playgroud)
编辑:我想出了以下解决方法,但我仍然关心距离计算。
我需要计算一个向量与其列表中的下一个邻居之间的距离,而不是像我在这里所做的那样计算整个距离矩阵(所有向量彼此相对)。
import numpy as np
vectorList = [(0, 10), (4, 8), (14, 14), (16, 19), (35, 16)] …Run Code Online (Sandbox Code Playgroud) python ×10
processing ×3
algorithm ×2
geometry ×2
combinations ×1
data-science ×1
dataframe ×1
depth-buffer ×1
distance ×1
gaussianblur ×1
insertion ×1
join ×1
jupyter ×1
list ×1
metrics ×1
multi-index ×1
nested ×1
numpy ×1
offset ×1
or-tools ×1
pandas ×1
permutation ×1
pypy ×1
python-2.7 ×1
pywin32 ×1
quantization ×1
rotation ×1
shader ×1
statistics ×1
transform ×1
z3 ×1