Удаление столбца в 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(). Но, вероятно, он не так удобен для чтения, как предыдущий.
удачи!