【问题标题】:How to get the remainder of a dataset如何获取数据集的其余部分
【发布时间】:2012-11-17 11:34:55
【问题描述】:

以下是从数据集中选择一组随机排列的示例,如何使用剩余的数据创建新数据集。例如,在下面我选择 49402(大约 10%)并创建一个名为 UnseenTestdata 的数据集,在选择后我希望其余部分进入一个名为 testdata 的新数据集。

pointsToPick = 49402;  %# Numbers to pick
rVec = randperm(494021);   %# Random permutation of datapoint indices (N=494021 in this case)  

UnseenTestdata = fulldata(rVec(1:pointsToPick),:); %# Random sample

Unseentestdata 减去 fulldata = 数据集的剩余部分,恰当地命名为 testdata。

fulldata 集的维度是 494021x6,我从 fulldata 中随机选择 49402x6。然后,我需要从 fulldata 中减去 unseentestdata 剩下的内容。

Barnabas Szabolcs 添加了一个测试用例答案:

fulldata = [1 2; 3 4; 5 6; 7 8];
rVec = randperm(4);  
pointsToPick=2;
unseen = fulldata(rVec(1:pointsToPick),:); 
testdata = fulldata(rVec(pointsToPick:length(rVec)),:); 

但是这不起作用,我已经屏幕转储了结果:

如果您在屏幕转储中注意到未见过的数据 = 3,4 和 7,8,但是如果您在测试数据中发现 7,8 仍然存在。

如果完整数据 =

1,2
3,4
5,6
7,8

在这种情况下,我们随机选择两个行,看不见的行是:

row
3,4
7,8

那么剩下的应该是:

1,2
5,6

但是,如果您在示例测试 testdata 的屏幕转储中注意到该行:

7,8

显示示例测试不起作用。

【问题讨论】:

  • 你的意思是 setminus 不是吗?也可以添加fulldata的维度吗?
  • 更新了我的答案,还添加了测试用例进行验证。
  • 我希望你再次检查我的答案,抱歉我对那些括号很草率。 Plus 也更新了测试用例,因为它的特点是剩余元素的数量和完整数据的第二维相等。

标签: matlab


【解决方案1】:

如果我正确理解你的问题,解决方案是

testdata = fulldata(rVec((pointsToPick+1):length(rVec)),:);

简单的测试用例:

fulldata = [1 2; 3 4; 5 6; 7 8;10 9];
rVec = randperm(4);  // gives me first time [4 2 3 1 5]
pointsToPick=2;
unseen = fulldata(rVec(1:pointsToPick),:); // [7 8; 3 4]
// length(rVec) is 5
testdata = fulldata(rVec((pointsToPick+1):length(rVec)),:); // [5 6; 1 2; 10 9]

在某种意义上你可以清楚地看到fulldata = unseen (setplus) testdata。 请注意,我们需要“+1”,因为与 C++ 中的说法不同,数组是从一个向上索引的,所以最后一个索引是 length 而不是 length-1

你可以用这个来验证事情是否正确:

 isequal(sort([unseen; test]), sort(full_data)) // should be true

【讨论】:

  • 嗯,这有点可疑,testdata 的输出是 444620,而应该是 444619。
  • 哈哈你不能只做+1,可以吗?我需要准确的数据,即 unseentestdata 减去 fulldata = 余数。它可能需要索引 unseentestdata。长度等可能不是我想要的。
  • 添加了测试示例,它几乎可以满足您的描述。其他投反对票的人:你能澄清一下你投反对票的原因吗?
  • 那么 pointsToPick:length 在你的第一个例子中会起作用吗?不是 pointsToPick+1
  • 如果要选择的点的长度是 2 并且索引就像你说的那样,那么 testdata = whats left?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
  • 2022-08-10
  • 2012-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多