2012-09-06

 1 template <int N>
 2 class X {
 3 public:
 4     typedef int I;
 5     void f(int) {
 6         std::cout << "f!" << std::endl;
 7     }
 8 };
 9 
10 template <int N>
11 void fppm (void (X<N>::*p)(typename X<N>::I) );        //此处调用了一个函数
12 
13 int main() {
14     fppm(&X<33>::f);
15 }

上面第11行的调用中,fppm的参数是一个函数。 void 是返回值, (X<N>::*p) 是函数名, (typename X<N>::I>)是函数的参数,对应第4行的定义 X<N>::I 可知 此处表示 int

因此对11行相当于 void fppm (void f(int) )

 

 

 1 template <typename T>
 2 void f(T){
 3     std::cout << "T" << std::endl;
 4 }
 5 template<>
 6 void f(double) {
 7     std::cout << "double" << std::endl;
 8 };
 9 
10 void (*df) (double) = &f;       //此处实例化了一个double版的 f 函数
11 
12 df(111);                        //输出 double
13 df('a');                        //输出 double   
14 df(2.33);                       //输出 double

 

模版实参演绎只能应用于函数模版和成员函数模版, 不能应用于类模版。对于类模版的构造函数也不能根据实参来演绎类模版参数。只能手工指定。

 

函数模版可以指定缺省函数调用实参,但不能根据缺省实参演绎模版参数。

template<typename T>
void init(T* loc, T const& val = T() ){
    *loc = val;
}

init(12, 13);                   //指定参数,未调用缺省值
init(12);                       //为指定第二个参数,调用缺省值,模版参数根据第一个参数演绎

template<typename T>
void f (T x = 11){
}

f<int> ();                     //模版参数指定为int,调用缺省值x=11
f ();                          //错误,模版参数无法根据缺省值演绎

转载于:https://www.cnblogs.com/fanqs/archive/2012/09/06/2673837.html

好的,根据您的需求,我为您编写了如下代码。 首先,我们需要加载所需的包和数据: ```R library(xlsx) library(randomForest) library(keras) library(e1071) data_path <- "D:/Desktop/002362hwkj.xlsx" stk_data <- read.xlsx(data_path, sheetIndex = 1) ``` 然后,我们将数据按时间升序排列,并将日期列转化为日期格式: ```R stk_data$Date <- as.Date(stk_data$Date) stk_data <- stk_data[order(stk_data$Date),] ``` 接下来,我们将数据划分为训练集和测试集。由于您没有指定测试集的时间范围,这里我将最后一年的数据作为测试集: ```R train_data <- stk_data[1:(nrow(stk_data)-252),] test_data <- stk_data[(nrow(stk_data)-251):nrow(stk_data),] ``` 然后,我们为每个模型准备数据。对于随机森林和支持向量机,我们只需要选择需要的特征并将其转化为矩阵格式。对于长短期记忆神经网络,我们需要将数据转化为时间序列格式,并将其标准化。 ```R # 随机森林和支持向量机 train_rf_svm <- train_data[,c("Open", "Close", "Volume")] train_rf_svm <- data.matrix(train_rf_svm) test_rf_svm <- test_data[,c("Open", "Close", "Volume")] test_rf_svm <- data.matrix(test_rf_svm) # 长短期记忆神经网络 train_lstm <- train_data[,c("Close")] train_lstm <- data.matrix(train_lstm) scaler <- preProcess(train_lstm, method = c("scale", "center")) train_lstm <- predict(scaler, train_lstm) test_lstm <- test_data[,c("Close")] test_lstm <- data.matrix(test_lstm) test_lstm <- predict(scaler, test_lstm) train_lstm <- array(train_lstm, dim = c(nrow(train_lstm), 1, 1)) test_lstm <- array(test_lstm, dim = c(nrow(test_lstm), 1, 1)) ``` 接下来,我们分别训练随机森林、长短期记忆神经网络和支持向量机,并对测试集进行预测: ```R # 随机森林 rf_model <- randomForest(train_rf_svm[,1:2], train_rf_svm[,3], ntree = 500) rf_pred <- predict(rf_model, test_rf_svm[,1:2]) # 长短期记忆神经网络 lstm_model <- keras::keras_model_sequential() lstm_model %>% layer_lstm(units = 50, input_shape = c(1, 1)) %>% layer_dense(units = 1) lstm_model %>% compile(loss = 'mean_squared_error', optimizer = 'adam') lstm_model %>% fit(train_lstm[,1:1,], train_lstm[,1,], epochs = 100, batch_size = 32) lstm_pred <- predict(lstm_model, test_lstm)[,1] # 支持向量机 svm_model <- svm(train_rf_svm[,1:2], train_rf_svm[,3], kernel = "linear") svm_pred <- predict(svm_model, test_rf_svm[,1:2]) ``` 最后,我们计算三个模型的准确率,并绘制时间序列图: ```R # 计算准确率 rf_accuracy <- sum(rf_pred == test_rf_svm[,3])/nrow(test_rf_svm) lstm_accuracy <- sum(round(lstm_pred) == test_lstm[,1])/nrow(test_lstm) svm_accuracy <- sum(svm_pred == test_rf_svm[,3])/nrow(test_rf_svm) cat("随机森林准确率:", rf_accuracy, "\n") cat("LSTM准确率:", lstm_accuracy, "\n") cat("支持向量机准确率:", svm_accuracy, "\n") # 绘制时间序列图 par(mfrow=c(3,1)) plot(test_data$Date, test_data$Close, type = "l", col = "blue", xlab = "", ylab = "Price") lines(test_data$Date, rf_pred, col = "red") legend("bottomright", legend = c("Actual", "Predicted"), col = c("blue", "red"), lty = c(1, 1)) plot(test_data$Date, test_data$Close, type = "l", col = "blue", xlab = "", ylab = "Price") lines(test_data$Date, round(lstm_pred), col = "red") legend("bottomright", legend = c("Actual", "Predicted"), col = c("blue", "red"), lty = c(1, 1)) plot(test_data$Date, test_data$Close, type = "l", col = "blue", xlab = "", ylab = "Price") lines(test_data$Date, svm_pred, col = "red") legend("bottomright", legend = c("Actual", "Predicted"), col = c("blue", "red"), lty = c(1, 1)) ``` 注意:由于数据未提供证券代码,代码中的模型训练和预测均基于数据的 Close 列。如果您的数据中包含多个证券的交易数据,请修改代码以适配您的数据。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值