小编an_*_*ade的帖子

加速地面集中所有对之间的L1距离

我有一个描述地面集的矩阵NxM(通常是10k X 10k元素).每行代表一个对象,每列代表一个特定的特征.例如,在矩阵中

   f1 f2 f3
x1 0  4  -1
x2 1  0  5
x3 4  0  0
x4 0  1  0
Run Code Online (Sandbox Code Playgroud)

对象x1在特征1中具有值0,在特征1中具有值4,在特征-1中具有值0.这个值是一般实数(double's).

我必须计算所有对象(所有对线)之间的几个自定义距离/不相似度.为了比较,我想计算L1(曼哈顿)和L2(欧几里德)距离.

我使用Eigen库来执行我的大部分计算.为了计算L2(欧几里得),我使用以下观察:对于两个大小为n的向量ab,我们有:

||a - b||^2 = (a_1 - b_1)^2 + (a_2 - b_2)^2 + ... +(a_n - b_n)^2
            = a_1^2 + b_1^2 - 2 a_1 b_1 + a_2^2 + b_2^2 - 2 a_2 b_2 + ... + a_n^2 + b_n^2 - 2 a_n b_n
            = a . a + b . …

c++ algorithm parallel-processing matrix eigen

14
推荐指数
1
解决办法
1035
查看次数

在基于范围的循环c ++ 11中向向量添加元素

我使用了C++ 11标准提供的新的基于范围的for循环,我提出了以下问题:假设我们vector<>使用基于范围的迭代迭代for,并且我们在向量的末尾添加一些元素这个迭代.那么,什么时候循环结束?

例如,请参阅以下代码:

#include <iostream>
#include <vector>
using namespace std;
int main() {
    vector<unsigned> test({1,2,3});
    for(auto &num : test) {
        cout << num << " ";
        if(num % 2)
            test.push_back(num + 10);
    }
    cout << "\n";
    for(auto &num : test) 
        cout << num << " ";
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我用"-std = c ++ 11"标志测试了G ++ 4.8和Apple LLVM版本4.2(clang ++),输出是(对于两者):

1 2 3
1 2 3 11 13
Run Code Online (Sandbox Code Playgroud)

请注意,第一个循环终止于原始向量的末尾,尽管我们向其添加了其他元素.似乎for-range循环仅在开始时评估容器结束.事实上,这是范围的正确行为吗?是否由委员会指定?我们能相信这种行为吗?

请注意,如果我们改变第一个循环

for(vector<unsigned>::iterator it = test.begin(); it != test.end(); ++it) …
Run Code Online (Sandbox Code Playgroud)

c++ for-loop c++11

12
推荐指数
1
解决办法
5133
查看次数

使用新的初始化列表语法在地图中插入项目

我正在使用 C++11,我发现了一种在映射(无序和/或多映射)中插入值的非常有用的方法:

map<unsigned, string> test;
test.insert({1, "abc"});
Run Code Online (Sandbox Code Playgroud)

虽然这段代码可以工作(用 GCC 4.8 或 Clang 3.2 编译),但我有一些问题。基本上有insert()6 个我们感兴趣的签名

1. pair<iterator,bool> insert (const value_type& val);
2. template <class P> pair<iterator,bool> insert (P&& val);
3. void insert (initializer_list<value_type> il);
Run Code Online (Sandbox Code Playgroud)

前两个接受一个pair<const key_type,mapped_type>类型对象,而最后一个接受一个 then 列表。所以,理论上,代码

test.insert({1, "abc"});
Run Code Online (Sandbox Code Playgroud)

正在使用第二个insert()版本/签名,其中它使用 C++11 统一初始化来构建该对,因此将该对用作lvalue. 这可以“解释”为

test.insert(pair<const unsigned, string> {1, "abc"});
Run Code Online (Sandbox Code Playgroud)

请注意,我们还可以这样做

test.insert(pair<const unsigned, string>(1, "abc"));
Run Code Online (Sandbox Code Playgroud)

或者

test.insert(make_pair(1, "abc"));
Run Code Online (Sandbox Code Playgroud)

但第一个版本似乎更自然。这种方法有什么重大问题吗?与列表初始值设定项版本可能存在冲突?

dictionary insert initializer-list c++11

5
推荐指数
0
解决办法
2394
查看次数

Plotly:如何在两条垂直线之间设置填充颜色?

使用 matplotlib,我们可以“简单地”使用fill_between()示例中的方法填充两条垂直线之间的区域:

https://matplotlib.org/3.2.1/gallery/lines_bars_and_markers/fill_between_demo.html#selectively-marking-horizo​​ntal-regions-across-the-whole-axes

使用 matplotlib,我可以制作我需要的东西:

在此处输入图片说明

我们有两个信号,我正在计算滚动/移动 Pearson 和 Spearman 的相关性。当相关性低于 -0.5 或高于 0.5 时,我想对周期进行着色(Pearson 为蓝色,Spearman 为橙色)。我还在所有地块中用灰色将周末变暗。

但是,我发现使用 Plotly 很难完成相同的任务。了解如何在两条水平线之间进行操作也很有帮助。

请注意,我使用 Plotly 和 Dash 来加速多个绘图的可视化。用户要求更“动态类型的东西”。然而,我不是一个 GUI 人,不能花时间在这上面,尽管我需要用初步结果来喂养他们。

顺便说一句,我过去尝试过 Bokeh,但由于某种我不记得的原因而放弃了。Plotly 看起来不错,因为我可以使用 Python 或 R,这是我的主要开发工具。

谢谢,

卡洛斯

python fill low-level-api plotly

5
推荐指数
2
解决办法
3531
查看次数

比较多列是否相等

这可能是使用dplyrtidyverse 工具的一个非常基本的问题,但我找不到一个好的方法来做到这一点。

\n

假设我有一个宽格式的数据框,并且我想选择行,以便列的子集具有所有相同的值。天真地,我可以执行以下操作:

\n
> df <- tribble(\n    ~name, ~id,  ~cost, ~value1 , ~value2, ~value3,\n    "a",     1,     10,       1,        1,       1,\n    "a",     2,     20,       1,        2,       1,\n    "b",     3,     50,       1,        1,       3,\n    "b",     4,     45,       1,        1,       1,\n    "b",     5,     70,       2,        2,       2\n)\n\n\n> df %>% select(\n    value1 == value2 &\n    value1 == value3 &\n    value2 == value\n)\n\n# A tibble: 3 \xc3\x97 6\n  name     id  cost value1 value2 value3\n  <chr> <dbl> <dbl>  <dbl>  <dbl> …
Run Code Online (Sandbox Code Playgroud)

equality r startswith filter tidyverse

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