【发布时间】:2019-12-10 14:33:06
【问题描述】:
我正在尝试对我的数据集进行分类。为此,我将使用数据集的第 4 列。如果数据集的第 4 列等于 1,则该行将添加到名为 Q1 的新矩阵中。如果数据集的第 4 列等于 2,则该行将添加到矩阵 Q2。
我的代码:
i = input('Enter a start row: ');
j = input('Enter a end row: ');
search = importfiledataset('search-queries-features.csv',i,j);
[n, p] = size(search);
if j>n
disp('Please enter a smaller number!');
end
for s = i:j
class_id = search(s,4);
if class_id == 1
Q1 = search(s,1:4)
elseif class_id ==2
Q2 = search(s,1:4)
end
end
这会计算 Q1 和 Q2 矩阵,但它们都是 1x4 并且当它给出新的 Q1 时,旧的会被删除。如果条件为真,我需要添加新行并将其设为 2x4。我需要扩展我的Q1 矩阵。
简而言之,我正在尝试使用for 循环和if 语句将我的数据集分为两部分。
数据集:
我需要这样的结果:
Q1 = [30 64 1 1
30 62 3 1
30 65 0 1
31 59 2 1
31 65 4 1
33 58 10 1
33 60 0 1
34 58 30 1
34 60 1 1
34 61 10 1]
Q2 = [34 59 0 2
34 66 9 2]
如何防止我的代码删除Q1 和Q2 之前的行并获取整个矩阵?
【问题讨论】:
-
其实主要问题不是 if 语句问题是创建数组 (Q1,Q2)
-
您在每次迭代中都覆盖了
Q1和Q2。为什么要使用循环和 if 语句?如果您必须预先分配Q1和Q2,然后替换它们的行。最后删除未使用的行。你为什么不按照@Adriaan 的建议使用简单的逻辑索引? -
我在编辑它时遇到了问题,这就是我添加新帖子的原因。
标签: matlab for-loop if-statement matrix dataset