c++ 中实现np.corrcoef
时间: 2023-10-09 19:16:26 浏览: 256
np.mean np.cov numpy.corrcoef pyplot.scatter pyplot.contour函数
号
call I2C_Start
; 发送设备地址和写命令
mov A, #0xd0 ; 设备地址为0xd0
call I2C_SendByte
; 发送要读取的寄存器地址
mov A, #在 C++ 中实现 np.corrcoef 可以通过以下步骤实现:
1. 计算每个变量的均RTC_SEC ; 要读取秒寄存器
call I2C_SendByte
; 发送起始信号
call I2值和标准差;
2. 计算每个变量与其他变量的协方差矩阵;
3. 将协C_Start
; 发送设备地址和读命令
mov A, #0xd1 ; 设备地址为0xd1方差矩阵标准化,得到相关系数矩阵。
以下是 C++ 代码示例:
```c++
#include
call I2C_SendByte
; 读取时钟数据
call I2C_ReadByte ; 秒
mov RTC_SEC, <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector<double> mean(vector<vector<double>> data) {
int n A
call I2C_SendACK
call I2C_ReadByte ; 分
mov RTC_MIN, A
call I2C_Send = data.size();
int m = data[0].size();
vector<double> means(m, 0.0);
for (ACK
call I2C_ReadByte ; 时
mov RTC_HOUR, A
call I2C_SendACK
call I2Cint j = 0; j < m; j++) {
double sum = 0.0;
for (int i = _ReadByte ; 日
mov RTC_DAY, A
call I2C_SendACK
call I2C_ReadByte ; 月
mov0; i < n; i++) {
sum += data[i][j];
}
means[j] = sum / n;
RTC_MONTH, A
call I2C_SendACK
call I2C_ReadByte ; 年
mov RTC_YEAR, A
call I }
return means;
}
vector<double> std(vector<vector<double>> data) {
int n = data.size();
int m = data[0].size();
vector<double> stds(m, 0.0);
vector<double> means = mean(data);
for2C_SendNAK ; 最后一位数据后发送非应答信号
call I2C_Stop ; 停止总线 (int j = 0; j < m; j++) {
double sum = 0.0;
for (int i =
ret
; 在数码管上显示时间函数
DispTime: ; 将秒、分、时、日、月、年 0; i < n; i++) {
sum += pow(data[i][j] - means[j], 2);
}
分别存入R0-R5寄存器中
mov R0, RTC_SEC
mov R1, RTC_MIN
mov R stds[j] = sqrt(sum / n);
}
return stds;
}
vector<vector<double>> cov(vector<vector<double>> data)2, RTC_HOUR
mov R3, RTC_DAY
mov R4, RTC_MONTH
mov R5, RTC_YEAR
; 显示秒 {
int n = data.size();
int m = data[0].size();
vector<double> means = mean(data);
vector
mov A, R0 ; 秒存入ACC寄存器中
mov LSA, #0 ; LSA引脚输出低<vector<double>> covs(m, vector<double>(m, 0.0));
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
double sum = 0.0;
电平
mov LSB, #0 ; LSB引脚输出低电平
mov LSC, #0 ; LSC引脚输出 for (int k = 0; k < n; k++) {
sum += (data[k][i] - means[i])低电平
mov LSD, #0 ; LSD引脚输出低电平
mov DA, disp_table[A.0] ; DA * (data[k][j] - means[j]);
}
covs[i][j] = sum / (n - 1);
引脚输出相应的数码管段码
mov DB, disp_table[A.1]
call Delay ; 延时一段时间 }
}
return covs;
}
vector<vector<double>> corrcoef(vector<vector<double>> data) {
int n = data.size
; 显示分
mov A, R1 ; 分存入ACC寄存器中
mov LSA, #1 ; LSA();
int m = data[0].size();
vector<vector<double>> corr(m, vector<double>(m, 0.0));
引脚输出高电平
mov LSB, #0 ; LSB引脚输出低电平
mov LSC, #0 ; L vector<vector<double>> covs = cov(data);
vector<double> stds = std(data);
for (int i = 0SC引脚输出低电平
mov LSD, #0 ; LSD引脚输出低电平
mov DA, disp_table[A.; i < m; i++) {
for (int j = 0; j < m; j++) {
corr[i][j] = covs[i][j] / (stds[i] * stds[j]);
}
}
return corr;
}
int0] ; DA引脚输出相应的数码管段码
mov DB, disp_table[A.1]
call Delay ; 延 main() {
vector<vector<double>> data = {{1.0, 2.0, 3.0}, {4.0时一段时间
; 显示时
mov A, R2 ; 时存入ACC寄存器中
mov LSA,, 5.0, 6.0}, {7.0, 8.0, 9.0}};
vector<vector #0 ; LSA引脚输出低电平
mov LSB, #1 ; LSB引脚输出高电平
mov LSC<double>> corr = corrcoef(data);
for (int i = 0; i < corr.size(); i++) {
for (int, #0 ; LSC引脚输出低电平
mov LSD, #0 ; LSD引脚输出低电平
mov DA j = 0; j < corr[i].size(); j++) {
cout << corr[i][j] << " ";
}
, disp_table[A.0] ; DA引脚输出相应的数码管段码
mov DB, disp_table[A.1 cout << endl;
}
return 0;
}
```
其中,mean 函数用于计算均值,std 函数用于]
call Delay ; 延时一段时间
; 显示日
mov A, R3 ; 日存入ACC寄存器中
计算标准差,cov 函数用于计算协方差矩阵,corrcoef 函数用于计算相关系数矩mov LSA, #1 ; LSA引脚输出高电平
mov LSB, #1 ; LSB引脚输出高电平阵。在主函数中,我们可以以二维数组的形式传入数据,然后输出相应的相关系数矩阵。
阅读全文