matlab:在特定行号处添加一行零
matlab: add a row of zeros at specific row numbers
想就以下问题寻求帮助:我有一个数据集 131573*8,我想向该数据集添加 19247*8 个零行。需要在特定位置添加零行,我将其存储在矩阵 YE 中,大小为:19247*1。
举个例子:
YE 的第一个元素是数字 56。对于该特定行,我想在矩阵数据集中添加一行零。
现在数据集第 55-57 行看起来像:
55: 11 12 13 14 15 16 17 18
56: 21 22 23 24 25 26 27 28
57: 31 32 33 34 35 36 37 38
应该是:
55: 11 12 13 14 15 16 17 18
56: 0 0 0 0 0 0 0 0
57: 21 22 23 24 25 26 27 28
58: 31 32 33 34 35 36 37 38
我希望有人能帮助我 - 我还没有找到任何解决方案。
谢谢!
如果您想在特定行索引处 插入 行零到 dataset
中,一种矢量化方法是初始化所需最终大小的零矩阵,然后用 dataset
:
的内容填充索引向量 YE
中 不是 的行
N = size(dataset, 1)+size(YE, 1);
result = zeros(N, size(dataset, 2));
result(setdiff(1:N, YE), :) = dataset;
但是,上述解决方案创建了一个 new 矩阵 result
,它使用了更多内存。如果您想直接修改 dataset
并节省内存(因为它是一个大矩阵),这里有一个替代方案:
% Add the necessary number of rows of zeroes to the end:
dataset = [dataset; zeros([size(YE, 1) size(dataset, 2)])];
% Create an index vector to reorder the rows:
[~, index] = sort([setdiff(1:size(dataset, 1), YE).'; YE]);
% Reorder the rows:
dataset = dataset(index, :);
使用索引 YE 将行设置为 0:
dataset(YE, :) = zeros(1, size(dataset,2));
编辑:我看到您正在尝试插入零,而不是将该行设置为 0,因此请忽略上述内容。我建议将您的逻辑索引 YE 转换为行号,然后按如下方式操作:
rowsYE = find(YE == 1);
for idx = 1:length(rowsYE)
newData = dataset(1:rowsYE(idx)-1,:); % temp variable to hold data
newData(rowsYE(idx),:) = zeros(1,size(dataset,2)); % add a row of zeros
newData = [newData; dataset(rowsYE(idx):end,:)]; % add the rest of the data set
dataset = newData; % set the dataset = to temp
rowsYE = rowsYE + 1; % increment the rows index (since we added a new row)
end
想就以下问题寻求帮助:我有一个数据集 131573*8,我想向该数据集添加 19247*8 个零行。需要在特定位置添加零行,我将其存储在矩阵 YE 中,大小为:19247*1。
举个例子: YE 的第一个元素是数字 56。对于该特定行,我想在矩阵数据集中添加一行零。 现在数据集第 55-57 行看起来像:
55: 11 12 13 14 15 16 17 18
56: 21 22 23 24 25 26 27 28
57: 31 32 33 34 35 36 37 38
应该是:
55: 11 12 13 14 15 16 17 18
56: 0 0 0 0 0 0 0 0
57: 21 22 23 24 25 26 27 28
58: 31 32 33 34 35 36 37 38
我希望有人能帮助我 - 我还没有找到任何解决方案。
谢谢!
如果您想在特定行索引处 插入 行零到 dataset
中,一种矢量化方法是初始化所需最终大小的零矩阵,然后用 dataset
:
YE
中 不是 的行
N = size(dataset, 1)+size(YE, 1);
result = zeros(N, size(dataset, 2));
result(setdiff(1:N, YE), :) = dataset;
但是,上述解决方案创建了一个 new 矩阵 result
,它使用了更多内存。如果您想直接修改 dataset
并节省内存(因为它是一个大矩阵),这里有一个替代方案:
% Add the necessary number of rows of zeroes to the end:
dataset = [dataset; zeros([size(YE, 1) size(dataset, 2)])];
% Create an index vector to reorder the rows:
[~, index] = sort([setdiff(1:size(dataset, 1), YE).'; YE]);
% Reorder the rows:
dataset = dataset(index, :);
使用索引 YE 将行设置为 0:
dataset(YE, :) = zeros(1, size(dataset,2));
编辑:我看到您正在尝试插入零,而不是将该行设置为 0,因此请忽略上述内容。我建议将您的逻辑索引 YE 转换为行号,然后按如下方式操作:
rowsYE = find(YE == 1);
for idx = 1:length(rowsYE)
newData = dataset(1:rowsYE(idx)-1,:); % temp variable to hold data
newData(rowsYE(idx),:) = zeros(1,size(dataset,2)); % add a row of zeros
newData = [newData; dataset(rowsYE(idx):end,:)]; % add the rest of the data set
dataset = newData; % set the dataset = to temp
rowsYE = rowsYE + 1; % increment the rows index (since we added a new row)
end