标签: vector

将命名字符向量转换为data.frame

我有一个从xmlAttrs返回的命名字符向量,如下所示:

testVect <- structure(c("11.2.0.3.0", "12.89", "12.71"), .Names = c("db_version", 
             "elapsed_time", "cpu_time"))
Run Code Online (Sandbox Code Playgroud)

我想将其转换为如下所示的数据框:

testDF <- data.frame("db_version"="11.2.0.3.0","elapsed_time"=12.89,"cpu_time"=12.71)
head(testDF)
  db_version elapsed_time cpu_time
1 11.2.0.3.0        12.89    12.71
Run Code Online (Sandbox Code Playgroud)

r vector type-conversion dataframe

74
推荐指数
4
解决办法
5万
查看次数

在向量<double>上使用std :: max_element

我正在尝试使用std::min_elementstd::max_element返回双精度矢量中的min和max元素.我的编译器不喜欢我目前正在尝试使用它们,我不理解错误消息.我当然可以编写自己的程序来查找最小值/最大值,但我想了解如何使用这些函数.

#include <vector>
#include <algorithm>

using namespace std;

int main(int argc, char** argv) {

    double cLower, cUpper;
    vector<double> C;

    // code to insert values in C not shown here

    cLower = min_element(C.begin(), C.end());
    cUpper = max_element(C.begin(), C.end());

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是编译器错误:

../MIXD.cpp:84: error: cannot convert '__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >' to 'double' in assignment
../MIXD.cpp:85: error: cannot convert '__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >' to 'double' in assignment
Run Code Online (Sandbox Code Playgroud)

有人请解释我做错了什么吗?

c++ vector max min

72
推荐指数
3
解决办法
11万
查看次数

如何随机化矢量

我想在一个简单的单行命令中随机重新组织向量中数字的顺序?

我的特定向量V对于从1到10的每个值有150个条目:

V <- rep(1:10, each=150)
Run Code Online (Sandbox Code Playgroud)

random r shuffle vector

72
推荐指数
2
解决办法
7万
查看次数

计算2D矢量的叉积

来自维基百科:

交叉乘积是对三维欧几里德空间中的两个向量的二元运算,其导致另一个向量垂直于包含两个输入向量的平面.

鉴于定义仅定义在三个(或七个,一个和零)维度中,如何计算两个二维向量的叉积?

我见过两个实现.一个返回一个新的向量(但只接受一个向量),另一个返回一个标量(但是是两个向量之间的计算).

实现1(返回标量):

float CrossProduct(const Vector2D & v1, const Vector2D & v2) const
{
    return (v1.X*v2.Y) - (v1.Y*v2.X);
}
Run Code Online (Sandbox Code Playgroud)

实现2(返回向量):

Vector2D CrossProduct(const Vector2D & v) const
{
    return Vector2D(v.Y, -v.X);
}
Run Code Online (Sandbox Code Playgroud)

为什么不同的实施?我将使用标量实现?我将使用矢量实现?

我问的原因是因为我自己编写了一个Vector2D类,并且不知道使用哪种方法.

language-agnostic math 2d vector

71
推荐指数
5
解决办法
12万
查看次数

如何使用迭代器?

我正在计算两点之间的距离.我用C++中的向量存储的两点:(0,0)和(1,1).

我应该得到结果

0
1.4
1.4
0
Run Code Online (Sandbox Code Playgroud)

但我得到的实际结果是

0
1
-1
0
Run Code Online (Sandbox Code Playgroud)

我认为在向量中使用迭代器的方式有问题.我该如何解决这个问题?

我发布了以下代码.

typedef struct point {
    float x;
    float y;
} point;

float distance(point *p1, point *p2)
{
    return sqrt((p1->x - p2->x)*(p1->x - p2->x) +
                (p1->y - p2->y)*(p1->y - p2->y));
}

int main()
{
    vector <point> po;
    point p1; p1.x = 0; p1.y = 0;
    point p2; p2.x = 1; p2.y = 1;
    po.push_back(p1);
    po.push_back(p2);

    vector <point>::iterator ii;
    vector <point>::iterator jj;
    for (ii = po.begin(); ii != po.end(); ii++) …
Run Code Online (Sandbox Code Playgroud)

c++ pointers iterator vector using-statement

71
推荐指数
3
解决办法
4万
查看次数

std :: vector :: resize()与std :: vector :: reserve()

这篇文章的评论部分中有一个关于使用std::vector::reserve()vs.的帖子std::vector::resize().

这是原始代码:

void MyClass::my_method()
{
    my_member.reserve(n_dim);
    for(int k = 0 ; k < n_dim ; k++ )
         my_member[k] = k ;
}
Run Code Online (Sandbox Code Playgroud)

我相信要写出元素vector,正确的做法是打电话std::vector::resize(),而不是std::vector::reserve().

实际上,以下测试代码在VS2010 SP1的调试版本中"崩溃":

#include <vector>

using namespace std;

int main()
{
    vector<int> v;
    v.reserve(10);
    v[5] = 2;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我是对的,还是我错了?并且VS2010 SP1是对的,还是错了?

c++ stl vector

71
推荐指数
3
解决办法
5万
查看次数

QVector与QList

我有一个整数列表,我需要迭代,但数组是不合适的.之间有什么区别vectorslists,是有什么我需要知道我挑式前?

为了清楚起见,我已经阅读了QT文档,但这是我所知道的程度:

QList<T>,QLinkedList<T>QVector<T>提供类似的功能.这是一个概述:

  • 对于大多数用途,QList是正确的使用类.它的基于索引的API比QLinkedList's基于迭代器的API更方便,并且通常比QVector将其项目存储在内存中的速度更快.它还扩展到可执行文件中较少的代码.
  • 如果您需要一个真实的链表,保证在列表中间插入常量时间,并将迭代器设置为项而不是索引,请使用QLinkedList.
  • 如果您希望项目占据相邻的内存位置,请使用QVector.

c++ qt list vector

70
推荐指数
3
解决办法
4万
查看次数

如何从命名数字中提取数字(没有名称)?

我只是寻找B1(newx)线性模型系数的值,而不是名称.我只想要0.5值.我不想要名字"newx".

newx <- c(0.5,1.5.2.5)

newy <- c(2,3,4)

out <- lm(newy ~ newx)
Run Code Online (Sandbox Code Playgroud)

out 好像:

Call:
lm(formula = newy ~ newx)

Coefficients:
(Intercept)         newx  
       1.5         1.0  
Run Code Online (Sandbox Code Playgroud)

我到了这里 但现在我被卡住了.

out$coefficients["newx"]

newx 

1.0 
Run Code Online (Sandbox Code Playgroud)

r vector named lm

70
推荐指数
2
解决办法
6万
查看次数

为什么向量&lt;向量&lt;int&gt;&gt;比向量&lt;pair&lt;int,int&gt;&gt;“更重”?

在最近的一次采访中,我建议使用vector<pair<int,int>>over vector<vector<int>>,因为我们只想为向量中的每个条目存储两个值。vector<pair<int,int>>我说了一些“我们应该使用over vector<vector<int>>,因为后者比前者”的话。

编码会议结束后,他们说使用对而不是向量是个好主意,并要求我详细说明之前所说的“更重”的含义。不幸的是,我无法详细说明。是的,我知道我们只能在一对中输入两个值,但在向量中可以输入更多值,并且当向量的大小==容量等时,该向量会自动调整大小,等等,但我应该如何回答他们的问题 - 为什么具体使用比vector<pair<int,int>> 更好vector<vector<int>>?在后一种情况下还做了哪些额外的事情?

c++ algorithm vector

69
推荐指数
5
解决办法
6622
查看次数

按位置从data.table中提取列作为向量

如何从data.table中提取列作为向量的列?以下是我尝试过的一些代码片段:

DT<-data.table(x=c(1,2),y=c(3,4),z=c(5,6))
DT
#   x y z
#1: 1 3 5
#2: 2 4 6
Run Code Online (Sandbox Code Playgroud)

我想使用列位置获取此输出

DT$y 
#[1] 3 4
is.vector(DT$y)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

使用列位置获取此输出的其他方法

DT[,y] 
#[1] 3 4
is.vector(DT[,y])
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

这不会给出矢量

DT[,2,with=FALSE]
#   y
#1: 3
#2: 4
is.vector(DT[,2,with=FALSE])
#[1] FALSE
Run Code Online (Sandbox Code Playgroud)

这两个不起作用:

DT$noquote(names(DT)[2]) # Doesn't work
#Error: attempt to apply non-function

DT[,noquote(names(DT)[2])] # Doesn't work
#[1] y
Run Code Online (Sandbox Code Playgroud)

这不会给出一个向量:

DT[,noquote(names(DT)[2]),with=FALSE] # Not a vector
#   y
#1: 3
#2: 4
is.vector(DT[,noquote(names(DT)[2]),with=FALSE])
#[1] FALSE
Run Code Online (Sandbox Code Playgroud)

indexing r vector data.table

67
推荐指数
2
解决办法
6万
查看次数