💡 Инструкция: Выберите один ответ из пяти. Время — 85 минут. Верный вариант в каждом вопросе один; после завершения доступны общий результат, профиль по 6 темам и объяснения.
Вопрос 2 из 30
Ниже приведена неудачная реализация из темы «Типы чисел». Какая редакция возвращает требуемый результат и оставляет независимый контроль?
MATLAB Фрагмент для рецензии Копировать
Xsingle = cast(X,"single"); assert(isequal(Xsingle,X));
Заменить исходный блок этой реализацией. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Xsingle = single(X);
relerr = norm(double(Xsingle)-X,"fro")/norm(X,"fro");
Принять эту редакцию как полную замену текущего блока. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Типы чисел» также сверить класс данных и сохранение ожидаемой структуры выхода. Xsingle = single(X); clear X
Переписать вычислительный шаг следующим образом. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Xsingle = half(X);
Внести показанную замену без изменения входного контракта. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Xsingle = cast(X,"single"); assert(isequal(Xsingle,X));
Использовать показанный вариант вместо дефектного фрагмента. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Типы чисел» также сверить класс данных и сохранение ожидаемой структуры выхода. Xsingle = uint8(X);
Вопрос 7 из 30
В тесте «Память и большие массивы» показанный фрагмент нарушает правило из темы «Копирование при записи». Какая редакция исправляет причину, а не только её проявление?
MATLAB Фрагмент для рецензии Копировать
B = &A;
B(1,1) = 0;
Внести показанную замену без изменения входного контракта. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Копирование при записи» также сверить класс данных и сохранение ожидаемой структуры выхода. B = A;
B(1,1) = 0;
Использовать показанный вариант вместо дефектного фрагмента. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Контрольный пример должен воспроизводиться на чистом запуске проекта. B = copyonwrite(A,false);
B(1,1)=0;
Переписать вычислительный шаг следующим образом. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. B(:) = A;
B(1,1)=0;
Принять эту редакцию как полную замену текущего блока. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. B = A;
A(1,1) = 0;
Заменить исходный блок этой реализацией. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. B = &A;
B(1,1) = 0;
Вопрос 12 из 30
Для темы «Высокие массивы для больших данных» в тесте «Память и большие массивы» приведён дефектный блок. Какое замечание рецензента можно принять?
MATLAB Фрагмент для рецензии Копировать
mu = double(XTall);
Внести показанную замену без изменения входного контракта. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Контрольный пример должен воспроизводиться на чистом запуске проекта. mu = sum(XTall,1)/height(XTall);
Использовать показанный вариант вместо дефектного фрагмента. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. muTall = mean(XTall,1);
mu = gather(muTall);
Переписать вычислительный шаг следующим образом. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Высокие массивы для больших данных» также сверить класс данных и сохранение ожидаемой структуры выхода. mu = XTall.mean(1);
Принять эту редакцию как полную замену текущего блока. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. mu = double(XTall);
Заменить исходный блок этой реализацией. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Высокие массивы для больших данных» также сверить класс данных и сохранение ожидаемой структуры выхода. mu = mean(gather(XTall),1);
Вопрос 17 из 30
Показанный код из темы «Потоковая обработка» не соответствует постановке. Какая редакция восстанавливает вычислительный договор?
MATLAB Фрагмент для рецензии Копировать
S = load("big.mat","X"); process(S.X);
Заменить исходный блок этой реализацией. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Допуск и критерий принятия зафиксировать до просмотра результата. Для темы «Потоковая обработка» также сверить класс данных и сохранение ожидаемой структуры выхода. for first=1:blockSize:numel(m.X), process(m.X(first)); end
Принять эту редакцию как полную замену текущего блока. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Потоковая обработка» также сверить класс данных и сохранение ожидаемой структуры выхода. m = matfile("big.mat"); process(m.X);
Использовать показанный вариант вместо дефектного фрагмента. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. Для темы «Потоковая обработка» также сверить класс данных и сохранение ожидаемой структуры выхода. X = memmapfile("big.mat"); process(X);
Внести показанную замену без изменения входного контракта. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. m = matfile("big.mat");
for first=1:blockSize:size(m,"X",1)
idx = first:min(first+blockSize-1,size(m,"X",1));
chunk = m.X(idx,:);
process(chunk);
end
Переписать вычислительный шаг следующим образом. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. Контрольный пример должен воспроизводиться на чистом запуске проекта. Для темы «Потоковая обработка» также сверить класс данных и сохранение ожидаемой структуры выхода. S = load("big.mat","X"); process(S.X);
Вопрос 27 из 30
В расчёте по теме «Архитектурные компромиссы» обнаружено содержательное расхождение. Какую замену следует принять после проверки?
MATLAB Фрагмент для рецензии Копировать
X = cat(1,readAllBlocks());
result=aggregate(process(X));
Использовать показанный вариант вместо дефектного фрагмента. На минимальном примере сопоставить форму выхода и два контрольных значения с независимым эталоном. Допуск и критерий принятия зафиксировать до просмотра результата. allResults = cell(1,numBlocks);
for k=1:numBlocks, allResults{k}=process(readBlock(k)); end
result=aggregate(allResults);
Переписать вычислительный шаг следующим образом. Добавить регрессионный пример, на котором исходная версия расходится с требованием по значению или размерности. Отдельно убедиться, что ближайшая неверная реализация этот контроль не проходит. X = cat(1,readAllBlocks());
result=aggregate(process(X));
Внести показанную замену без изменения входного контракта. Сравнить результат с формулой на двух входах, где меняются ориентация данных и масштаб величин. В журнале проверки сохранить вход, ожидаемый результат и фактическое расхождение. Для темы «Архитектурные компромиссы» также сверить класс данных и сохранение ожидаемой структуры выхода. save("temp.mat"); load("temp.mat"); result=process(X);
Принять эту редакцию как полную замену текущего блока. После замены проверить обычный и граничный входы, заранее вычислив ожидаемый результат. Контрольный пример должен воспроизводиться на чистом запуске проекта. state = initState();
for k=1:numBlocks
state = updateState(state, readBlock(k));
end
result = finalize(state);
Заменить исходный блок этой реализацией. Перед принятием проверить предпосылки операции, форму результата и один численный инвариант. Результат проверки оформить так, чтобы его можно было повторить без ручной подгонки. Для темы «Архитектурные компромиссы» также сверить класс данных и сохранение ожидаемой структуры выхода. result = arrayfun(@(k) process(readBlock(k)),1:numBlocks);