Удаление столбца в Hansl

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

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

для определенного я,

Х (:, I)=[]

который удаляет столбец и изменяет форму матрицы.

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

Спасибо!

1 ответ

Решение

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

Во-первых, если вам известно число столбцов и значение i, решение может использовать аппаратный индексный вектор (для i==2 и cols(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)

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

удачи!

Другие вопросы по тегам