加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

在C中仅对多维数组的行进行随机播放

发布时间:2020-12-16 07:23:17 所属栏目:百科 来源:网络整理
导读:我是C的初学者因此我在洗牌多维数组的行中面临问题.我已经查看了相关的解决方案,但没有帮助我. 这是我到目前为止所尝试的: int main(int argc,char **argv){ Arrayfloat,2,2 f1; f1 = allocate(4,4); f1[0][0] = 1.0; f1[0][1] = 2.0; f1[0][2] = 3.0; f1[0
我是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> 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::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> 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;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读