我正在尝试在GLSL中编写一个函数,该函数返回到矩形的符号距离.矩形是轴对齐的.我觉得有点卡住; 我无法绕过我需要做的事情才能让它发挥作用.
我想出的最好的是:
float sdAxisAlignedRect(vec2 uv, vec2 tl, vec2 br)
{
// signed distances for x and y. these work fine.
float dx = max(tl.x - uv.x, uv.x - br.x);
float dy = max(tl.y - uv.y, uv.y - br.y);
dx = max(0.,dx);
dy = max(0.,dy);
return sqrt(dx*dx+dy*dy);
}
Run Code Online (Sandbox Code Playgroud)
这会生成一个看起来像这样的矩形:

线条显示距矩形的距离.它工作正常,但只适用于矩形外的距离.在矩形内部,距离是静态的0..
如何使用统一的公式在矩形内获得精确的距离?
我有一个MySQL表,其中有数千个数据点存储在3列R,G,B中.如何使用欧几里德距离找到哪个数据点最接近给定点(a,b,c)?
我在表格中单独保存RGB颜色值,因此每列中的值限制为0-255.我想要做的是通过找到欧氏距离最小的颜色找到最接近的颜色匹配.
我显然可以通过表格中的每个点来计算距离,但这不足以扩展.有任何想法吗?
我有以下Pandas DataFrame:
In [31]:
import pandas as pd
sample = pd.DataFrame({'Sym1': ['a','a','a','d'],'Sym2':['a','c','b','b'],'Sym3':['a','c','b','d'],'Sym4':['b','b','b','a']},index=['Item1','Item2','Item3','Item4'])
In [32]: print(sample)
Out [32]:
Sym1 Sym2 Sym3 Sym4
Item1 a a a b
Item2 a c c b
Item3 a b b b
Item4 d b d a
Run Code Online (Sandbox Code Playgroud)
我想找到一种优雅的方法来Item根据这个距离矩阵得到每个距离:
In [34]:
DistMatrix = pd.DataFrame({'a': [0,0,0.67,1.34],'b':[0,0,0,0.67],'c':[0.67,0,0,0],'d':[1.34,0.67,0,0]},index=['a','b','c','d'])
print(DistMatrix)
Out[34]:
a b c d
a 0.00 0.00 0.67 1.34
b 0.00 0.00 0.00 0.67
c 0.67 0.00 0.00 0.00
d 1.34 0.67 0.00 0.00
Run Code Online (Sandbox Code Playgroud)
例如Item1,Item2 …
简介:首先,作为介绍,我很自豪地在StackOverflow上提出我的第一个问题.我希望我能帮助别人,就像他们帮助我一样.
算法:
我正在用CUDA编写一个程序,问题如下:
两个矩阵A(n*128)和B(m*128)
我取A的第一行,然后逐个计算该向量与B的所有行之间的距离.
我在矩阵C的一行上写出每个距离的结果,因此C的元素C(i,j)包含A的行i和B的行j之间的距离.
然后我继续下一行A.
我用这种方式实现了它:我有一个由(n*m)个块组成的网格,每个块有128个线程.(1*128).
问题:程序成功运行并带有预期结果,但执行时间仅比单线程CPU版本快5到10倍.所以我想知道如何在减少之前增加每个线程的工作量以提高性能.
内核代码(原始:未优化)
__global__ void EuclideanDistances( float *A, float *B , float *C , int n , int m)
{
// SIZE is equal to 128
__shared__ float accumResult[SIZE];
float sA;
float sB;
// MAPPING
int bx = blockIdx.x; // n
int by = blockIdx.y; // m
int ty = threadIdx.y; // 128
int tx = threadIdx.x; // 1
sA = A [bx * SIZE + ty];
sB …Run Code Online (Sandbox Code Playgroud) 我正在尝试自己完成斯坦福 CS231n 2017 CNN 课程的作业。
我正在尝试仅使用矩阵乘法和 Numpy 的求和广播来计算 L2 距离。L2距离为:
我想如果我使用这个公式我可以做到:
以下代码显示了计算 L2 距离的三种方法。如果我将 method 的输出compute_distances_two_loops与 method 的输出进行比较compute_distances_one_loop,两者相等。但我将该方法的输出compute_distances_two_loops与该方法的输出进行比较compute_distances_no_loops,其中我仅使用矩阵乘法和求和广播实现了 L2 距离,它们是不同的。
def compute_distances_two_loops(self, X):
"""
Compute the distance between each test point in X and each training point
in self.X_train using a nested loop over both the training data and the
test data.
Inputs:
- X: A numpy array of shape (num_test, D) containing test data.
Returns:
- dists: A numpy …Run Code Online (Sandbox Code Playgroud) 我有一个n维点的集合,我想找到哪两个是最接近的.我可以为2个维度做的最好的是:
from numpy import *
myArr = array( [[1, 2],
[3, 4],
[5, 6],
[7, 8]] )
n = myArr.shape[0]
cross = [[sum( ( myArr[i] - myArr[j] ) ** 2 ), i, j]
for i in xrange( n )
for j in xrange( n )
if i != j
]
print min( cross )
Run Code Online (Sandbox Code Playgroud)
这使
[8, 0, 1]
Run Code Online (Sandbox Code Playgroud)
但这对于大型阵列来说太慢了.我可以应用什么样的优化?
有关:
我需要在matlab中计算2个矩阵之间的欧氏距离.目前我正在使用bsxfun并计算距离如下(我附加了一段代码):
for i=1:4754
test_data=fea_test(i,:);
d=sqrt(sum(bsxfun(@minus, test_data, fea_train).^2, 2));
end
Run Code Online (Sandbox Code Playgroud)
fea_test的大小是4754x1024而fea_train是6800x1024,使用他的for循环导致for的执行花费大约12分钟,我认为太高了.有没有办法更快地计算两个矩阵之间的欧氏距离?
我被告知通过删除不必要的for循环,我可以减少执行时间.我也知道pdist2可以帮助减少计算时间,但由于我使用的是matlab版本7.我没有pdist2函数.升级不是一种选择.
任何帮助.
问候,
巴维亚
我想计算两个向量之间的欧氏距离(或两个Matrx行,无关紧要).在OpenCV中是否有一个很好的功能?
假设我有两个四维向量(即a和b)如下:
a = {a1, a2, a3, a4}
b= {b1, b2, b3, b4}
Run Code Online (Sandbox Code Playgroud)
如何计算这些向量之间的欧几里德距离?