小编jos*_*ber的帖子

需要更好的算法寻找两组最小距离点的映射

问题:我有两个重叠的2D形状,A和B,每个形状具有相同的像素数,但形状不同.形状的一些部分是重叠的,并且每个形状的一些部分不重叠.我的目标是将形状A中的所有非重叠像素移动到形状B中的非重叠像素.由于每个形状中的像素数相同,我应该能够找到1对1的映射像素.限制是我想找到最小化所有移动像素行进的总距离的映射.

蛮力:解决这个问题的蛮力方法显然是不可能的,因为我必须计算所有可能的映射的总距离,我认为有n个!(其中n是一个形状中的非重叠像素的数量)乘以计算映射中每对点的距离n的计算,给出总的O(n*n!)或类似的东西.

回溯:我能想到的唯一"更好"的解决方案是使用回溯,我会跟踪当前的最小值,在我评估某个映射的任何时候,如果我达到或超过该最小值,我继续下一个映射.即使这样做也不会比O(n!)更好.

有没有办法以合理的复杂性解决这个问题?

还要注意,简单地将一个点映射到它最接近的匹配邻居的"明显"方法并不总能产生最佳解决方案.

更简单的方法?:作为次要问题,如果不存在可行的解决方案,一种可能性可能是将每个非重叠部分划分为小区域,并映射这些区域,从而大大减少映射的数量.为了计算两个区域之间的距离,我将使用质心(该区域中像素位置的平均值).然而,这提出了我应该如何进行分区以获得接近最佳答案的问题.

任何想法都赞赏!!

mapping algorithm math image mathematical-optimization

9
推荐指数
2
解决办法
1679
查看次数

算法优化 - 多点间最短路径

问题:我有很多积分.这些点中的每一个都有一个列表,其中包含对已经计算和存储它们之间距离的其他点的引用.我需要确定从原点开始并通过特定数量的点到达任何目的地的最短路线.

例如:我正在度假,我住在一个特定的城市.我正在做一个单程旅行,看到任何四个城市,我想尽可能少地旅行.我不能不止一次访问同一个城市.

当前解决方案:现在我只是手动迭代每个可能性并存储最短路径.这有效,但感觉效率低下.此外,这个问题最终将扩展到包括从多个原点搜索到多个目标点,所以我认为这可能会爆炸搜索空间.

搜索最短路径的更好方法是什么?

algorithm search routes mathematical-optimization

9
推荐指数
1
解决办法
3万
查看次数

如何在同一窗口中打印三个维恩图

我想把这三个维恩图放在一起.因此,当我打印它们时,它们出现在同一页面中

library(VennDiagram)
df1 <- data.frame(G1=sample(1:100, 10), G2=sample(1:100, 10), 
                  G3=sample(1:100, 10), G4=sample(1:100, 10))
venn.plot.df1 <- venn.diagram(x = as.list(df1), filename = NULL,
                            cat.col = c( "black",   "red",     "green3",  "blue" ),
                            fill=c("black",   "red",     "green3",  "blue"))
grid.draw(venn.plot.df1)

df2 <- data.frame(G1=sample(1:100, 10), G2=sample(1:100, 10), 
                  G3=sample(1:100, 10), G4=sample(1:100, 10))
venn.plot.df2 <- venn.diagram(x = as.list(df2), filename = NULL,
                              cat.col = c( "black",   "red",     "green3",  "blue" ),
                              fill=c("black",   "red",     "green3",  "blue"))
grid.draw(venn.plot.df2)

df3 <- data.frame(G1=sample(1:100, 10), G2=sample(1:100, 10), 
                  G3=sample(1:100, 10), G4=sample(1:100, 10))
venn.plot.df3 <- venn.diagram(x = as.list(df3), filename …
Run Code Online (Sandbox Code Playgroud)

plot r venn-diagram

9
推荐指数
1
解决办法
3167
查看次数

r - 投资组合优化 - solve.QP - 约束条件不一致

我试图使用solve.QP来解决投资组合优化问题(二次问题)

共3项资产

有4个限制:

  1. 权重之和等于1
  2. 投资组合预期收益率等于5.2%
  3. 每个资产权重大于0
  4. 每个资产权重小于.5

Dmat是协方差矩阵

Dmat <- matrix(c(356.25808, 12.31581, 261.8830, 212.31581, 27.24840, 18.50515, 261.88302, 18.50515,535.45960), nrow=3, ncol=3)
Run Code Online (Sandbox Code Playgroud)

dvec是每项资产的预期回报

dvec <- matrix(c(9.33, 3.33, 9.07), nrow=3, ncol=1)
Run Code Online (Sandbox Code Playgroud)

Amat是约束矩阵

A.Equality <- matrix(c(1,1,1), ncol=1)
Amat <- cbind(A.Equality, dvec, diag(3), -diag(3))
Run Code Online (Sandbox Code Playgroud)

约束A ^ T b> = b_0,b向量

bvec <- c(1, 5.2, rep(0, 3), rep(-0.5, 3))
Run Code Online (Sandbox Code Playgroud)

meq = 2,因为有两个相等约束,第一和第二约束是相等的

然后我运行函数solve.QP

library(quadprog)
qp <- solve.QP(Dmat, dvec, Amat, bvec, meq=2)
Run Code Online (Sandbox Code Playgroud)

但它给出了错误

Error in solve.QP(Dmat, dvec, Amat, bvec, meq = 2) : constraints are inconsistent, no …
Run Code Online (Sandbox Code Playgroud)

portfolio r mathematical-optimization quadratic

9
推荐指数
1
解决办法
1万
查看次数

r计算组中元素的组合

我希望计算两个元素的每个组合出现在同一组中的次数.

例如,用:

> dat = data.table(group = c(1,1,1,2,2,2,3,3), id=c(10,11,12,10,11,13,11,13))
> dat
   group id
1:     1 10
2:     1 11
3:     1 12
4:     2 10
5:     2 11
6:     2 13
7:     3 11
8:     3 13
Run Code Online (Sandbox Code Playgroud)

预期结果将是:

id.1  id.2  nb_common_appearances
10    11    2                      (in group 1 and 2)
10    12    1                      (in group 1)
11    12    1                      (in group 1)
10    13    1                      (in group 2)
11    13    2                      (in group 2 and 3)
Run Code Online (Sandbox Code Playgroud)

r data.table

9
推荐指数
3
解决办法
544
查看次数

在dplyr tbl_df中获取已删除列的最佳做法

我记得在R-帮助评论在2001年说drop = TRUE[.data.frame是R中历史上最严重的设计决策.

dplyr纠正了这一点并且没有隐含地下降.当试图旧代码转换为dplyr风格,这引起了当一些讨厌的错误d[, 1]d[1]假设的载体.

我目前的解决方法使用unlist如下所示来获得1列向量.有更好的想法吗?

library(dplyr)

d2 = data.frame(x = 1:5, y = (1:5) ^ 2)
str(d2[,1]) # implicit drop = TRUE
# int [1:5] 1 2 3 4 5

str(d2[,1, drop = FALSE])
# data.frame':  5 obs. of  1 variable:
#  $ x: int  1 2 3 4 5

# With dplyr functions
d1 = data_frame(x = 1:5, y = x ^ 2)
str(d1[,1])
# …
Run Code Online (Sandbox Code Playgroud)

r dataframe dplyr

9
推荐指数
1
解决办法
622
查看次数

负指数拟合:曲线看起来太高

我试图将负指数拟合到R中的某些数据,但拟合线与数据相比看起来太高,而我使用Excel的内置功率拟合的拟合看起来更可信.有人可以告诉我为什么吗?我已经尝试过使用这个nls()函数,optim()并从这两个方法中获得类似的参数,但两者的拟合看起来都很高.

   x    <- c(5.96, 12.86, 8.40, 2.03, 12.84, 21.44, 21.45, 19.97, 8.92, 25.00, 19.90, 20.00, 20.70, 16.68, 14.90, 26.00, 22.00, 22.00, 10.00, 5.70, 5.40, 3.20, 7.60, 0.59, 0.14, 0.85, 9.20, 0.79, 1.40, 2.68, 1.91)
   y    <- c(5.35, 2.38, 1.77, 1.87, 1.47, 3.27, 2.01, 0.52, 2.72, 0.85, 1.60, 1.37, 1.48, 0.39, 2.39, 1.83, 0.71, 1.24, 3.14, 2.16, 2.22, 11.50, 8.32, 38.98, 16.78, 32.66, 3.89, 1.89, 8.71, 9.74, 23.14)

    xy.frame <- data.frame(x,y)

    nl.fit <- nls(formula=(y ~ a * …
Run Code Online (Sandbox Code Playgroud)

r curve-fitting

9
推荐指数
1
解决办法
1487
查看次数

添加(不合并!)两个具有不相等行和列的数据帧

我想有效地对两个数据帧的条目求和,尽管不保证数据帧具有相同的维或列名.合并并不是我在这之后的真实情况.相反,我想创建一个输出对象,其中包含属于任一添加数据帧的所有行和列名称.在该输出的每个位置,我想对计算值使用以下逻辑:

  • 如果行/列配对属于两个输入数据帧,我希望输出包括它们的总和
  • 如果行/列配对仅属于一个输入数据帧,我想在输出中包含该值
  • 如果行/列配对不属于任何输入矩阵,我希望在输出中的该位置具有0.

例如,请考虑以下输入数据框:

df1 = data.frame(x = c(1,2,3), y = c(4,5,6))
rownames(df1) = c("a", "b", "c")
df2 = data.frame(x = c(7,8), z = c(9,10), w = c(2, 3))
rownames(df2) = c("a", "d")
> df1
  x y
a 1 4
b 2 5
c 3 6
> df2
  x  z  w 
a 7  9  2
d 8 10  3
Run Code Online (Sandbox Code Playgroud)

我想要最终结果

> df2
   x  y   z  w
a  8  4   9  2
b  2  5   0  0
c  3  6 …
Run Code Online (Sandbox Code Playgroud)

r dataframe

9
推荐指数
1
解决办法
1025
查看次数

如何在两个人A和B之间的对话中仅提取人A的陈述

我有两个任意人A和B之间的对话记录.

c1 <- "Person A: blabla...something Person B: blabla something else Person A: OK blabla"
c2 <- "Person A: again blabla Person B: blabla something else Person A: thanks blabla"
Run Code Online (Sandbox Code Playgroud)

数据框如下所示:

df <- data.frame(id = rbind(123, 345), conversation = rbind(c1, c2))

df

    id                                                                     conversation
c1 123 Person A: blabla...something Person B: blabla something else Person A: OK blabla
c2 345   Person A: again blabla Person B: blabla something else Person A: thanks blabla
Run Code Online (Sandbox Code Playgroud)

现在我想只提取人A的一部分并将其放在数据框中.结果应该是:

   id                     person_A
1 123 blabla...something OK …
Run Code Online (Sandbox Code Playgroud)

regex text-extraction r text-mining dataframe

8
推荐指数
1
解决办法
171
查看次数

有效地选择整数的组合

假设我们有一个 5x5 的矩阵,其中填充了 0。

myMatrix <- matrix(rep(0, 25), ncol = 5)
Run Code Online (Sandbox Code Playgroud)

现在,让我们选择 1 到 5 之间的整数三元组。

triplet <- c(1,2,3)
Run Code Online (Sandbox Code Playgroud)

对于这个三元组的所有组合,我们现在在矩阵中添加 1,使用以下函数:

addCombinationsToMatrix <- function(.matrix, .triplet){
    indexesToChange <- as.matrix(expand.grid(.triplet, .triplet))
    .matrix[indexesToChange] <- .matrix[indexesToChange] + 1
    .matrix
}
Run Code Online (Sandbox Code Playgroud)

使用该函数,我们从

myMatrix

     [,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    0    0
[2,]    0    0    0    0    0
[3,]    0    0    0    0    0
[4,]    0    0    0    0    0
[5,]    0    0    0    0    0
Run Code Online (Sandbox Code Playgroud)

myMatrix <- addCombinationsToMatrix(myMatrix, triplet)
myMatrix

     [,1] …
Run Code Online (Sandbox Code Playgroud)

algorithm r mathematical-optimization

8
推荐指数
1
解决办法
256
查看次数