C++ - 将 0 到 9 之间的整数设置为特征库矩阵的随机值
C++ - Setting ints from 0 to 9 as random values for Eigen library matrix
我正在尝试使用 C++ 中的 Eigen 库制作一个简单的随机矩阵乘法程序,但我使用 setRandom();
函数得到的数字是从 -1 到 1 的浮点数,我希望数字是从 0 到 9 的整数,我该怎么做?
我的代码:
int mat_size;
cout << "Enter the size of the array: " << endl;
cin >> mat_size;
MatrixXd m = MatrixXd(mat_size,mat_size);
MatrixXd n = MatrixXd(mat_size,mat_size);
m.setRandom();
n.setRandom();
cout << "Matrix m: " << endl << m << endl;
cout << "Matrix n: " << endl << n << endl;
cout << "The product between m and n is: " << endl;
cout << m * n << endl;
3*3
矩阵的输出始终为:
Matrix m:
0.680375 0.59688 -0.329554
-0.211234 0.823295 0.536459
0.566198 -0.604897 -0.444451
Matrix n:
0.10794 -0.270431 0.83239
-0.0452059 0.0268018 0.271423
0.257742 0.904459 0.434594
The product between m and n is:
-0.0384828 -0.466066 0.585123
0.0782496 0.564396 0.280774
-0.0260932 -0.571318 0.113959
我希望它们是这样的:
matrix:
4 8 9
3 2 7
3 8 1
这里有一种无需显式循环每个矩阵元素即可工作的可能性:
#include <iostream>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
int main(){
int nrow = 8;
int ncol = 8;
MatrixXd m = (MatrixXd::Random(nrow,ncol)+MatrixXd::Ones(nrow,ncol))*5;
MatrixXi mi = m.cast<int>();
cout << mi << endl;
}
输出:
8 2 6 1 6 5 0 0
3 5 7 4 2 7 9 0
7 4 1 1 6 4 5 4
7 6 6 1 5 8 0 0
9 3 0 9 4 2 1 2
1 5 2 2 9 3 6 9
3 9 1 5 2 8 8 9
7 9 8 8 7 9 3 8
您可以尝试将浮点数转换为整数
,如下所示float f = m;
float f2 = n;
int i = int(f + 0.5);
int j = int (f2 + 0.5);
它将对其进行舍入,因此它可能无法 100% 准确地表示特征值。
答案如下:
对于矩阵 M:
for(int i = 0; i < mat_size; i++) {
for(int j = 0; j < mat_size; j++) {
m(i,j) = static_cast<int>(10.0*abs(m(i,j)));
}
}
使用 5 作为此输出mat_size:
Matrix m:
6 6 0 8 9
2 3 2 2 5
5 5 2 4 7
5 4 0 7 6
8 1 9 2 6
所以我只是为n做同样的事情,仅此而已,我希望这可以帮助将来的其他人。
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 将特征矩阵的向量设置为0
- 将字符随机转换为大写的函数
- 将平面阵列重塑为复杂的特征类型
- 用于检测函数类型是否为否的特征
- 如何为我的容器实现随机访问迭代器?
- 生成随机.txt文件,10行,10列。充满随机:"*"、"#"、"@"。然后将随机字符替换为'P'
- 零四元数和任何向量都不为零的特征积,这是一个错误吗?
- 如何在特征中将 std::vector 转换为矩阵?
- 将字符串转换为 int 后的随机值
- 如何将 50 行和 50 列的二维数组编码为一个为元素随机分配星号的函数?
- 将特征数组转换为特征向量
- 特征:如何将"greater than"的结果(在ArrayXf上)转换为特征向量
- C++ - 将 0 到 9 之间的整数设置为特征库矩阵的随机值
- 如何将特征::Matrix4f转换为特征::仿射3f
- 如何将元素定义为与随机访问迭代器指向的元素相同的类型
- 检查类型是否为特征 3 类型
- 有任何相同的种子为Matlab随机和c++随机
- 尝试为特征矩阵实现一种初始化列表语法
- 以将阵列中的数字范围映射为均匀随机1到100