2016-05-15 3 views
0

У меня очень простой вопрос. Я хочу удалить столбец из матрицы в цикле.удаление столбца в hansl

В Matlab я использую следующее:

для некоторого I,

X (:, I) = []

, который удаляет столбец ап перестраивает матрицу.

Я хочу знать эквивалент в программе Hansl (Gretl), пожалуйста.

Спасибо!

+0

Это тот парень, который болтается с Chewbcc? –

+0

Я хочу: (у вас есть идеи? –

+0

Извините, я знаю Matlab, но не Гретл. Надеюсь, вам удастся с этим, это не очень популярный тег? –

ответ

1

Жаль, что это, вероятно, слишком поздно для вас, но я только что увидел ваш вопрос и, возможно, он полезен для других. В hansl (скриптовый скрипт и язык матрицы gretl) я мог бы подумать о нескольких возможностях:

Во-первых, если вам известно количество столбцов и значение i, решение может использовать проводной вектор-указатель (для я == 2 и перевалы (X) == 5 здесь):

X = X[, {1, 3,4,5}] 

во-вторых, так как первое решение, вероятно, слишком ограничительный характер, можно сцепить левую и правую части матрицы, как:

X = X[, 1: i-1] ~ X[, i+1 :cols(X)] 

Но проблема в том, что я должен не индексировать первый или последний столбец, или индексирование приведет к ошибке.

Так мое окончательное предложение, которое должно работать универсально:

X = selifc(X, ones(1, i-1) ~ 0 ~ ones(1, cols(X) - i)) 

Функция selifc() удаляет столбец, для которого второй вектор аргумент имеет 0 запись. Это также работает для i == 1 или i == cols (X). Более короткий вариант этого конечного раствора может быть:

X = selifc(X, seq(1, cols(X)) .!= i) 

который делает поэлементное не-равный-с-я сравнение (=.!) Из индексов столбцов, построенных с функцией след(). Но это, вероятно, не так читаемо, как предыдущий.

удачи!

+0

PS: по совпадению времени, пару дней назад gretl получил эту новую синтаксическую функцию для удаления строк или столбцов. Теперь вам просто нужно написать 'X = X [, -i] ', используя минус номер столбца как ваш псевдоиндекс. –

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