В случае каких-либо сомнений: Nan = Non-numeric datatype
для целей этого вызова.
Напишите программу или функцию, которая принимает матрицу / массив в качестве входных данных, а также список индексов столбцов.
Задача состоит в том, чтобы удалить строки, в которых находятся все элементы в указанных столбцах Nan
. Не имеет значения, являются ли другие элементы в строке числовыми или нет. Надеемся, что следующие примеры сделают это более понятным (он одноиндексный):
Input array:
16 NaN 3 13
5 11 NaN 8
NaN 7 NaN 12
4 14 -15 1
Input column index: [1 3]
Output array:
16 NaN 3 13
5 11 NaN 8
4 14 -15 1
----
Input array:
16 NaN 3 13
5 11 NaN 8
NaN 7 NaN 12
4 14 -15 1
Input column index: 3
Output array =
16 NaN 3 13
4 14 -15 1
----
Input array:
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
NaN NaN NaN NaN
Input column index: 1 2 4
Output array:
[]
Правила и разъяснения:
- Матрица всегда будет непустой
- Числовые значения будут конечными, но не обязательно целыми или положительными
- Вектор индекса столбца может быть пустым (в этом случае строки не будут удалены)
- Индекс столбца никогда не будет иметь значений, превышающих размеры матрицы
- Вы можете предположить, что в списке индексов столбцов не будет дубликатов
- Вы можете выбрать, хотите ли вы использовать нулевые или одноиндексированные значения (пожалуйста, укажите)
- Вы можете принять вход в любом удобном формате
- Массив как список списков в порядке. Индексы столбцов могут быть отдельными аргументами
ans =
и подобное принимается в выводе- Вы можете выбрать, какой тип нечислового типа данных вы хотите использовать
- Должно быть невозможным выполнение арифметических операций с этим типом данных или преобразование его в конечное число с использованием таких функций, как
float(x)
.
- Должно быть невозможным выполнение арифметических операций с этим типом данных или преобразование его в конечное число с использованием таких функций, как
Это код гольф, поэтому выигрывает самый короткий код в байтах.
источник
J
наvz
иK
сQ
.z
инициализируется для ввода,Q
для оцениваемого ввода.?KEfnmklKm@TdKQQ
пустые списки ложны в Pyth, и операторы присваивания возвращают значение, которое было присвоено, что экономит несколько байтов. Я надеюсь, вам понравится играть в гольф Pyth! :)L
->fnks@LTQE
JavaScript (ES6),
4846 байтобъяснение
Ожидается массив строк в виде массивов и массив нумерованных номеров для проверяемых столбцов. Возвращает массив массивов.
Прямо вперед
filter
иsome
. ПроверяетNaN
, используяn < Infinity
(true
для конечных чисел,false
дляNaN
s).источник
CJam, 18 байт
Безымянный блок (функция), ожидающий матрицу и нулевые индексы столбца в стеке (матрица сверху), который оставляет отфильтрованную матрицу в стеке. Я использую пустой массив
""
в качестве нечислового значения.Проверьте это здесь.
объяснение
источник
The column index vector can be empty (in which case no rows will be removed)
""
" Вы имели в виду "пустая строка"?[]
и""
являются идентичными и каноническое представление""
(например , это то , что вы получаете , когда вы stringify пустой массив).APL, 19 байт
Левый аргумент должен быть списком индексов (и это должен быть список, а не скаляр), правым аргументом является матрица. У APL есть два типа данных, числа и символы, поэтому это отфильтровывает типы символов.
тесты:
Объяснение:
⍵[;⍺]
: выберите данные столбцы из матрицы0↑¨
: взять первые0
элементы с начала каждого элемента⍬∘≡¨
: сравнить с числовым пустым списком∨/
: посмотреть, в какой из строк соответствует хотя бы один элемент⍵⌿⍨
: выберите эти строки из матрицыисточник
MATLAB,
3228 байтЯ отвечу на свой вопрос на этот раз. Лучшее, что я могу сделать в MATLAB - 28 байтов.
Я надеялся избежать использования обоихall
иisnan
каким - то образом, но не нашли способ еще.Тестовое задание:
Это безымянная анонимная функция, которая принимает входную матрицу в качестве первой входной переменной, а список индексов столбцов - в качестве второй.
В MATLAB
NaN < Inf
оценивается как ложное. Можно предположить, что все значения конечны, таким образом, проверяя, являются ли значения меньшеinf
эквивалентна проверке, не являются ли они не числовыми.any(...,2)
проверяет, есть ли какие-либо истинные значения вдоль второго измерения (строки). Если это так, то эти строки будут возвращены.Старая версия:
isnan(A(:,c))
возвращает массив с логическими значениями для указанных столбцов.~all(isnan(A(:,c)),2)
проверяет, все ли значения по второму измерению (строки) не числовые, и отменяет их. Это приводит к логическому вектору с позициями в позициях, которые мы хотим сохранить.A(~all(isnan(A(:,c)),2),:)
использует логическое индексирование для извлечения целых строкA
.Следующее 24-байтовое решение будет работать, если значения будут гарантированно ненулевыми:
источник
Рубин, 48 байтов
Ввод 0 основанных на индексах 1 .
На самом деле довольно очевидно.
select
элементы из массива, гдеany?
индексы расположеныmap
по строкеFixnum
s.Образец прогона:
1: я наконец написал это слово правильно с первой попытки! \ о /
источник
К5, 15 байт
При этом используются 0-индексированные столбцы и матричное представление списков в K:
Индексировать в матрицу (
x@
) строки, в которых (&
) не все из (~&/'
) равны нулю (^
).В бою:
источник
MATL , 15
16байтNaN
представлен на входе какN
. Индексирование основано на 1. Например, в первом тестовом случае входПопробуйте онлайн!
объяснение
источник
R, 49 байт
Вход основан на 1. Функция принимает матрицу (
m
) и вектор индексов столбцов (j
), которые могут отсутствовать.Два теста:
источник
Луа, 148 байт
Функция, которая принимает матрицу и массив в качестве входных данных и выводит матрицу с соответствующими строками в
nil
. Поскольку массивы почти такие же, как и в массивах C, уничтожение -free()
это то же самое, что сборщик мусора недалеко.Массивы индексируются 1 в Lua, и я использую строку
"NaN"
как ненуменный элемент.Вы можете попробовать Lua онлайн и скопировать / вставить следующий пример кода, чтобы попробовать это представление:
источник
Mathematica,
52514946 байтВвод [матрица в виде списка списков, вектор столбцов]
источник
Haskell, 39 байт
При этом используются индексы на основе 0. Пример использования (я использую
sqrt(-1)
для созданияNaN
s):Это просто простой фильтр, как видно из других ответов через понимание списка. Особый случай пустого списка индексов отлавливается отдельно.
источник