我有一个151 × 151的矩阵A.它是一个相关矩阵,因此1主对角线上有s,主对角线上方和下方有重复值.每行/每列代表一个人.
对于给定的整数,n我将寻求通过踢出人来减小矩阵的大小,这样我留下了一个n-by-n最小化元素总和的相关矩阵.除了获得缩写矩阵之外,我还需要知道应该从原始矩阵中引导的人的行号(或者他们的列号 - 它们将是相同的数字).
作为我的起点A = tril(A),它将从相关矩阵中去除冗余的非对角线元素.
因此,如果n = 4我们上面有假想的5- by- 5矩阵,那么很明显人5应该被踢出矩阵,因为那个人正在贡献很多非常高的相关性.
同样清楚的是,人1不应该被踢出,因为那个人贡献了很多负相关,从而降低了矩阵元素的总和.
我明白这sum(A(:))将总结矩阵中的所有内容.但是,我很清楚如何搜索最小可能的答案.
我注意到一个类似的问题.找到具有最小元素和的子矩阵,它有一个强力解决方案作为接受的答案.虽然这个答案很好,但对于一个151 × 151的矩阵来说这是不切实际的.
编辑:我曾想过迭代,但我认为这不会真正最小化简化矩阵中的元素总和.下面我有一个粗体的4- by- 4相关矩阵,边缘上有行和列的总和.很明显,n = 2最优矩阵是涉及人1和4 的2乘2的单位矩阵,但根据迭代方案,我会在迭代的第一阶段踢出人1,因此算法得出一个解决方案不是最佳的.我写了一个总是产生最佳解决方案的程序,当n或k很小时它运行良好,但是当试图从151 × 151矩阵制作一个最佳的75- x- 75矩阵时,我意识到我的程序需要数十亿年终止.
我含糊地回忆说,有时这些n选择k问题可以通过动态编程方法解决,避免重新计算的东西,但我无法弄清楚如何解决这个问题,也没有谷歌搜索启发我.
如果没有其他选择,我愿意牺牲精度以获得速度,或者最好的程序需要一周以上才能生成精确的解决方案.但是,如果能够生成一个精确的解决方案,我很高兴让程序运行长达一周.
如果程序无法在合理的时间范围内优化矩阵,那么我会接受一个解释为什么n选择此特定类型的k任务无法在合理的时间范围内解决的答案.
我想通过循环遍历每个NaN并使用isnan来替换矩阵中的所有NaN.但是,我怀疑这会使我的代码运行速度比应该的慢.有人可以提供更好的建议吗?
这是一个简单的例子。
library(tidyverse)
dat <- data.frame(x = c(1,2,3,4,5),
y = c(1,2,3,4,5))
ggplot(dat, aes(x, y)) +
geom_point(shape="\u2620", size = 8)
Run Code Online (Sandbox Code Playgroud)
这非常适合创建骷髅和交叉骨作为形状,因为2620 是此 unicode 字符的十六进制值。我实际上想要大象形状,它的十六进制代码为 1F418。
但是,将 1F418 替换为 2620 会产生错误消息
错误:找不到形状名称:* '8'
为什么大象形状不起作用?我怎样才能让大象的形状出现在我的情节中?
我有一条曲线,其中肉眼看不到最小点.出于这个原因,我希望使用标记突出显示最小点.
理想情况下,我会用标记突出显示该点,并在图中的文本中显示其坐标.
如果键入X = rand(2,3)然后size(X,1)和size(X,2)产生预期的结果.如果我输入,ndims (X)我会得到预期的两个维度.
但是,size(X, k) == 1哪里k是任何整数> 3.为什么会出现这种情况?
在 Google 表格中,我使用 IMPORTHTML 函数动态收集数据,并且该数据集中的一个元素当前复制到单元格 C1 中。
在另一张工作表中,我有一个从现在到 2017 年的日期列表作为 A 列。
在每天结束时,我想在相关日期旁边的 B 列中记录最终的 C1 分数。
我将如何以自动化的方式做到这一点?也就是说,我希望电子表格在每天结束时自行完成。
如果我有一个简单的矩阵
A = [1 3 ; 4 3 ; 6 12]
Run Code Online (Sandbox Code Playgroud)
然后去
A(:,3) = (A(:,1)+A(:,2))
Run Code Online (Sandbox Code Playgroud)
然后第3列中的每个元素都将包含第1列和第2列中对应元素的总和.
但是,当我走的时候
A(:,3) = (A(:,1)/A(:,2))
Run Code Online (Sandbox Code Playgroud)
我收到一条错误消息,Subscripted assignment dimension mismatch.谷歌搜索没有透露对此错误消息的启发性解释.这里有人可以帮忙吗?
饼形图的示例代码给出了这里:
figure(1, figsize=(6,6))
ax = axes([0.1, 0.1, 0.8, 0.8])
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
fracs = [15, 30, 45, 10]
explode=(0, 0.05, 0, 0)
pie(fracs, explode=explode, labels=labels,
autopct='%1.1f%%', shadow=True, startangle=90)
title('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5})
show()
Run Code Online (Sandbox Code Playgroud)
输出看起来像这样:
我只想说15%,10%等,最后不要有不必要的小数位。我该怎么做呢?
我有一个MATLAB双数组(通常是3x151,但大小可能会改变),我想检查是否有任何列在它们中具有完全相同的值,顺序相同.
例如,在以下数组中,第1列和第2列是重复的,但第3列则不是.
[ 3 3 2 ;
2 2 2 ;
2 2 3 ]
Run Code Online (Sandbox Code Playgroud)
如果找到重复的列,我想添加少量噪音(可能只添加到其中一列),以确保它们不再重复.
实现这一目标的最有效方法是什么?
matlab ×6
charts ×1
coordinates ×1
ggplot2 ×1
highlighting ×1
markers ×1
matplotlib ×1
optimization ×1
python ×1
r ×1
unicode ×1