2

我有一个由 7 组数据组成的数组,它们通过它们的索引 0-6 访问。我需要使用 6 个进行训练,使用 1 个进行测试,需要循环使用,直到达到 7 个组合。

培训 - 0, 1, 2, 3, 4, 5 测试 - 6

培训 - 1, 2, 3, 4, 5, 6 测试 - 0

培训 - 2, 3, 4, 5, 6, 0 测试 - 1

……

培训 6, 0, 1, 2, 3, 4, 测试 - 5

训练数据将是一个整数队列,而测试数据是一个整数队列。我的大脑被炸了,我需要拼命帮助。我已经诉诸于简单地对它们进行硬编码,但它看起来很糟糕,如果我想改变我拥有的集合数量,那么它将需要重写。

很多使用模数的答案!,我只用它来查找偶数:)我现在正在测试它是否适用于你的所有刚开始的投票

很多很棒的答案!你们是最棒的!:D

4

5 回答 5

2

模数是你的朋友。

for(int i = 0; i < set.Length; i++)
{
    for(int j = 0; j < set.Length - 1; j++)
    {
        // Do something with ... set[(i+j)%set.Length];
    }
    // Test with set[(i+set.Length-1)%set.Length]
}
于 2012-05-16T14:09:34.830 回答
1

一个简单的模运算将裁剪这些值。

for i in range(7):
  v = range(i, i+7)
  print [x % 7 for x in v[:-1]], v[-1] % 7
于 2012-05-16T14:09:54.130 回答
1

使用伪 C# 语法:

int[][] alldata = [[/* training1 */], [ /*training2*/ ], [ /* training3 */ ]];
for (int i = 0; i < alldata.Length; i++)
{
    int[][] testdata = new int[][] { alldata[i] };
    int[][] traindata = alldata.Where((d, idx) => idx != i).ToArray();
    //Do your thing.
}
于 2012-05-16T14:11:24.177 回答
1

我不确定我的数据集是否正确,但这就是你要找的吗?

Queue<Int>[] data = new Queue<Int>[7]();
int current;
for(int i=0; i<7; i++) {
    current = i;
    for(int j=0; j<6; j++) {
        training[i].add(data[(current + j)%7]);
        current++;
    }
    testing[i] = data[(current + 6)%7];
}
于 2012-05-16T14:12:21.227 回答
1

以下是我将如何解决这个问题:

void IndicesCycling(int[] indexes, out Queue<Queue<int>> data, out Queue<int> test)
{
    data = new Queue<Queue<int>>();
    test = new Queue<int>();
    for (int i = 0; i < indexes.Length; i++)
    {
       test.Enqueue(indexes[i]);
       Queue<int> tmp = new Queue<int>();
       for (int j = 1; j < indexes.Length; j++)
       { 
           tmp.Enqueue(indexes[(i+j)%indexes.Length]);
       }
       data.Enqueue(tmp);
    }
}
于 2012-05-16T14:15:54.337 回答