用特征类求向量中某些数的和 我是C++的新手,我使用的是特征库。我想知道是否有一种方法可以对向量中的某些元素求和。例如,假设我有一个100乘1的向量,我只想对前10个元素求和。有没有一种方法可以使用Eigen库实现这一点

用特征类求向量中某些数的和 我是C++的新手,我使用的是特征库。我想知道是否有一种方法可以对向量中的某些元素求和。例如,假设我有一个100乘1的向量,我只想对前10个元素求和。有没有一种方法可以使用Eigen库实现这一点,c++,eigen,C++,Eigen,我想做的是:假设我有一个1000乘1的向量,我想取前10个元素的平均值,然后取下10个元素的平均值,依此类推,并将其存储在某个向量中。因此,我将有一个大小为100的平均向量。非常感谢您的任何想法或建议 以下是我在代码中的开始步骤。我有一个sutemp4向量,它是1000乘1。现在我初始化一个新的向量S_a,我想把它作为均值向量。这是我迄今为止杂乱无章的代码:(注意,我的问题存在于crudeMonteCarlo函数中) #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间特征; 使

我想做的是:假设我有一个1000乘1的向量,我想取前10个元素的平均值,然后取下10个元素的平均值,依此类推,并将其存储在某个向量中。因此,我将有一个大小为100的平均向量。非常感谢您的任何想法或建议

以下是我在代码中的开始步骤。我有一个
sutemp4
向量,它是1000乘1。现在我初始化一个新的向量
S_a
,我想把它作为均值向量。这是我迄今为止杂乱无章的代码:(注意,我的问题存在于
crudeMonteCarlo
函数中)

#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间特征;
使用名称空间std;
void crudeMonteCarlo(int N,double K,double r,double S0,double sigma,double T,int N);
向量xd时间向量(双最小值、双最大值、整数n);
VectorXd call_payoff(VectorXd S,双K);
int main(){
int N=100;
双K=100;
双r=0.2;
双S0=100;
双西格玛=0.4;
双T=0.1;
int n=10;
crudeMonteCarlo(N,K,r,S0,sigma,T,N);
返回0;
}
向量xd时间向量(双最小值、双最大值、整数n){
向量xd m(n+1);
双增量=(最大-最小)/n;
对于(int i=0;i 0){
C(i)=S(i)-K;
}否则{
C(i)=0.0;
}
}
返回C;
}
void crudeMonteCarlo(整数N,双K,双r,双S0,双西格玛,双T,整数N){
//创建时间向量
VectorXd tt=时间向量(0.0,T,n);
向量xd t(n);
双dt=T/n;
对于(int i=0;i对于(int j=1;j的本征文件中说,本征块是矩阵或数组的矩形部分,可由
矩阵访问。块(i,j,p,q)
其中i和j是起始值(如0和0),p和q是块大小(如10和1)大概你会在10步中迭代i,然后使用
std::acculate
或者一个显式求和来找到
matrix.block(i,0,10,1)的平均值这个问题包括很多代码,这使得你很难理解你要问的问题。考虑只包括你的问题特有的代码。

在任何情况下,你都可以直接使用Eigen来做这些事情,非常简单。在Eigen中,向量只是一列的矩阵,所以这里的所有推理都直接适用于你所写的

const Eigen::Matrix<double, 100, 1> v = Eigen::Matrix<double, 100, 1>::Random();

const int num_rows = 10;
const int num_cols = 1;

const int starting_row = 0;
const int starting_col = 0;

const double sum_of_first_ten = v.block(starting_row, starting_col, num_rows, num_cols).sum();
const double mean_of_first_ten = sum_of_first_ten / num_rows;
常量本征::矩阵v=本征::矩阵::随机(); const int num_rows=10; 常量int num_cols=1; const int start_row=0; const int start_col=0; const double sum_of_first_ten=v.block(起始行、起始列、数值行、数值列)。sum(); const double mean_of_first_ten=_first_ten/num行之和;

总之:您可以使用
.block
获取块对象,
.sum()
对该块求和,然后使用常规除法获取平均值。

您可以使用
映射
重塑输入,然后立即执行所有子求和,而无需任何循环:

VectorXd A(1000);                           // input
Map<MatrixXd> B(A.data(), 10, A.size()/10); // reshaped version, no copy
VectorXd res = B.colwise().mean();          // partial reduction, you can also use .sum(), .minCoeff(), etc.
vectorxda(1000);//输入
映射B(A.data(),10,A.size()/10);//修改版本,无副本
VectorXd res=B.colwise().mean();//部分约化,也可以使用.sum()、.minCoeff()等。

欢迎使用Stack Overflow!尝试分享一些您已经尝试过的代码。@M.K.Hunter谢谢,我重新编辑了我的问题,其中包括我的代码以完成答案,对于向量,如问题中所述,
。分段(开始,大小)
更合适。
VectorXd A(1000);                           // input
Map<MatrixXd> B(A.data(), 10, A.size()/10); // reshaped version, no copy
VectorXd res = B.colwise().mean();          // partial reduction, you can also use .sum(), .minCoeff(), etc.