在Matlab中,[C,ia,ic]=unique(A)
函数返回一个排序数组C
,其中A
中的重复项被删除,ia
和ic
数组包含索引,使得C=A(ia)和A=C(ic)
。例如:
A = [1, 2, 3, -1, -2, 0, 0, 0, 4];
[C, ia, ic] = unique(A);
C = [-2, -1, 0, 1, 2, 3, 4];
% The indices are incremented by 1 to accomodate the C++ convection.
ia = [4, 3, 7, 0, 1, 2, 8]; % size(ia) = size(C)
ic = [3, 4, 5, 1, 0, 2, 2, 2, 6]; % size(ic) = size(A)
下面是我的实现:
std::vector<int> A = {1, 2, 3, -1, -2, 0, 0, 0, 4};
std::set<int> C(A.begin(), A.end());
std::vector<int> ic;
ic.reserve(A.size());
std::transform(A.begin(), A.end(), std::back_inserter(ic),
[&](int x) { return (std::distance(C.begin(), C.find(x))); });
我现在可以正确地得到阵列C和ic,但是我不知道如何得到阵列IA。
有人能帮我一下吗?
另一种方法在语法上与MATLAB类似:
#include <algorithm>
#include <vector>
std::vector<int> A = {1, 2, 3, -1, -2, 0, 0, 0, 4};
std::sort(A.begin(), A.end());
auto last = std::unique(A.begin(), A.end());
A.erase(last, A.end());
编译器资源管理器链接
答案与您计算ic
的方式非常相似。只需在transform
调用中交换a
和c
:
std::vector<int> ia;
ia.reserve(C.size());
std::transform(C.begin(), C.end(),
std::back_inserter(ia),
[&](int x) { return std::distance(A.begin(),
std::find(A.begin(), A.end(), x));
});
您还需要使用std::find
,因为std::vector
不提供.find()
成员函数。
如何从matlab运行clojure脚本? 我尝试了以下方法:使用jdk 1.7运行matlab,然后调用java 在matlab中,设置类路径并使用clojure编译器 这里有个错误: 当我编写运行clojure的java类时,一切都可以从控制台运行,但不能从matlab运行。请给出建议。
我的目标是检查是否在网络上的文件夹中找到具有特定(名称的一部分)的文件,同时考虑到它下面的所有文件夹。要做到这一点,我需要一种方法,以有效地获得一个列表的所有文件和文件夹在给定的文件夹和下面。我的递归函数在本地驱动器上每秒处理2500个项目,但在网络驱动器上每秒只处理几个项目。我需要更快的东西。 核心问题是:获取文件夹中包含isDirectory属性或类似属性的项目列表的最快方法是什么? 我把希望
问题内容: 我需要在Matlab中运行Java .jar文件。 我们将文件称为MyJar.jar,如果有帮助,我正在运行Java 1.8.0_121-b13。 我尝试了不同的解决方案,并收到了这些相应的错误 我已经设置了javaclasspath:C:\ My \ Java \ Class \ Path \ To \ MyJar.jar(即使它没有任何帮助) 我什至已经准备好编辑classpath
本文向大家介绍如何在TestNG中实现并行执行?,包括了如何在TestNG中实现并行执行?的使用技巧和注意事项,需要的朋友参考一下 我们可以借助TestNG实现并行执行。TestNG中有一个并行属性,用于此实现。TestNG中的并行执行与另一个称为thread-count的属性相关联。 parallel属性可以具有以下列出的值- 方法。 类。 执行个体 测验 示例 Testng xml文件。 对于
我试图从这个网站编程SHA256实现:http://bradconte.com/sha256_c在MSP430单片机板上。我正在使用开源的Energia IDE进行编程。 这是测试代码: 这就转换成了魔法 问题是输出总是错误的哈希代码。 这是输出: 我在这里做错的是测试代码还是其他什么?
我在C编程,但我只使用pthread. h,没有升压或C 11线程。 所以我试图使用线程,但是基于我之前的一个问题(链接),这似乎是不可行的,因为线程在完成任务后立即终止,使用线程池实现的一个更普遍的原因是通过以下方式减少线程创建开销为多个任务重用这些线程。 那么,在C中实现这一点的唯一其他方法是使用fork()并创建从主进程到子进程的管道吗?或者有没有一种方法可以在线程和它们的父线程之间设置一个
问题内容: 我有一个处理图像的Matlab代码。我想创建一个使用该代码的Hadoop映射器。我遇到了以下解决方案,但不确定哪种解决方案最好(对我而言,很难在hadoop中的每个从属节点上安装matlab编译器运行时): 手动将Matlab代码转换为C ++中的OpenCV,然后从映射器中调用其exe / dll(并为其提供适当的参数)。不确定,因为群集在每个节点上都安装了Linux,而不是Wind