我是C++的初学者,因此在改组多维数组的行时面临问题。我查看了相关的解决方案,但并没有太大帮助。
到目前为止,这是我尝试过的:
int main(int argc, char **argv){
Array<float, 2, 2> f1;
f1 = allocate(4, 4);
f1[0][0] = 1.0;
f1[0][1] = 2.0;
f1[0][2] = 3.0;
f1[0][3] = 4.0;
f1[1][0] = 5.0;
f1[1][1] = 6.0;
f1[1][2] = 7.0;
f1[1][3] = 8.0;
f1[2][0] = 9.0;
f1[2][1] = 10.0;
f1[2][2] = 11.0;
f1[2][3] = 12.0;
f1[3][0] = 13.0;
f1[3][1] = 14.0;
f1[3][2] = 15.0;
f1[3][3] = 16.0;
Array<float,2,2> feature1shuffled = shufflePoints(f1);
cout<<feature1shuffled<<endl;
return 0;
}
Array<float,2,2> shufflePoints(Array<float,2,2> dataSet){
random_device rd;
mt19937 g(rd());
shuffle(begin(dataSet), end(dataSet), g);
return dataSet;
}
但是它不能根据行正确地随机播放。有人可以帮我吗?
最佳答案
这是一个工作示例。它使用std::array:
#include <algorithm>
#include <random>
#include <array>
#include <iostream>
#include <iterator>
template <typename T, size_t x, size_t y>
using Array = std::array<std::array<T, x>, y>; // use std::array
using std::cout;
using std::endl;
using std::random_device;
using std::mt19937;
using std::begin;
using std::end;
// print array
std::ostream& operator<<(std::ostream& os, const Array<float, 4, 4>& ar)
{
for(const auto& i : ar) {
for(const auto& j : i) {
std::cout << j << '\t';
}
std::cout << '\n';
}
return os;
}
Array<float, 4, 4> shufflePoints(Array<float, 4, 4> dataSet){
random_device rd;
mt19937 g(rd());
// this will shuffle the rows but not the elements within them
shuffle(begin(dataSet), end(dataSet), g);
return dataSet;
}
int main(int argc, char **argv){
Array<float, 4, 4> f1{}; // elements set to 0
//f1 = allocate(4, 4); // not required
f1[0][0] = 1.0;
f1[0][1] = 2.0;
f1[0][2] = 3.0;
f1[0][3] = 4.0;
f1[1][0] = 5.0;
f1[1][1] = 6.0;
f1[1][2] = 7.0;
f1[1][3] = 8.0;
f1[2][0] = 9.0;
f1[2][1] = 10.0;
f1[2][2] = 11.0;
f1[2][3] = 12.0;
f1[3][0] = 13.0;
f1[3][1] = 14.0;
f1[3][2] = 15.0;
f1[3][3] = 16.0; // Array must have dimensions of 4, 4 to access subscripts [3][3]
Array<float, 4, 4> feature1shuffled = shufflePoints(f1);
cout << feature1shuffled << endl;
return 0;
}
关于c++ - 仅在C++中随机播放多维数组的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50451213/