2013-02-20 6 views
0

Я хочу получить вывод, удаляющий только одну строку и возвращающую строки покоя с помощью matlab. Для например: Рассмотрим матрицукак удалить только нужную строку из матрицы и вернуть остальные строки матрицы, используя matlab.

A = [1 1 1; 2 2 2; 3 3 3; 4 4 4] 

Для case1, мне нужно иметь отдельную матрицу, где первая матрица отображения нужных строк и другая матрица отображает покоя строки.

как B=1 то выход будет две матрицы, где первая матрица будет

C = [1 1 1] 

, а другая матрица будет

D = [2 2 2; 3 3 3; 4 4 4] 

аналогично в следующем случае B=2

затем

C = [2 2 2] 
D = [1 1 1; 3 3 3; 4 4 4] 

Как написать программу Matlab для такого случая?

ответ

3

Попробуйте это, учитывая ваши определения из A и B

C = A(B,:) 
D = A(setdiff(1:size(A,1),B),:) 

Я ожидаю, что вы можете легко обернуть их вверх в функцию.

0

можно извлечь строку таким образом:

C = A(1,:) 
C = 

    1 1 1 

можно извлечь Mulitple строк, это путь 2: 4 раскрывается в [2 3 4]

D = A(2:4,:) 
D = 

    2 2 2 
    3 3 3 
    4 4 4 

и вторым двоеточием в «A (1, :) расширяется до всех доступных столбцов.

надеюсь, что это помогает

2

Я думаю, что вы ищете что-то вроде этого

A = 

1  1  1 
2  2  2 
3  3  3 
4  4  4 

row=2; 
A(row,:)=[] 

A = 

1  1  1 
3  3  3 
4  4  4 

Чтобы сохранить исходную матрицу и сохранить строку, я хотел бы использовать что-то вроде следующей функции:

function [ A,out_row ] = removerow(A,row) 
%row is the number of the row you want to remove, and 
%A is the matrix you want it removed from. 
out_row=A(row,:); 
A(row,:)=[]; 
end 
+0

Но как сделать цикл для выбора строки один за другим и отображения остальной матрицы. – Ash

+1

Обратите внимание, что это деструктивная операция после выполнения 'A (строка, :) = []' 'A' становится 3-строчным массивом. Это, похоже, не соответствует первоначальным требованиям. –

+0

@HighPerformanceMark - Хорошо, я просто подумал, что он будет использовать его в чем-то подобном функции, которую я только что редактировал. – johnish

Смежные вопросы