这是我到目前为止所尝试的:
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> feature1shuffled = shufflePoints(f1); cout<<feature1shuffled<<endl; return 0;}Array<float,2> shufflePoints(Array<float,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::arrayusing std::cout;using std::endl;using std::random_device;using std::mt19937;using std::begin;using std::end;// print arraystd::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> shufflePoints(Array<float,4> dataSet){ random_device rd; mt19937 g(rd()); // this will shuffle the rows but not the elements within them shuffle(begin(dataSet),g); return dataSet;}int main(int argc,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> feature1shuffled = shufflePoints(f1); cout << feature1shuffled << endl; return 0;}总结
以上是内存溢出为你收集整理的在C中仅对多维数组的行进行随机播放全部内容,希望文章能够帮你解决在C中仅对多维数组的行进行随机播放所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)