Извлечение матрицы из вектора ячеек в MATLAB

Разреженная матрица — это большая матрица, в которой почти все элементы одинаковы. значение (обычно нулевое). Нормальное представление разреженной матрицы занимает много памяти, когда полезная информация может быть захвачена с гораздо меньшим. Возможный способ представить разреженную матрицу с помощью вектор ячейки, первый элемент которого представляет собой двухэлементный вектор, представляющий размер разреженной матрицы. Второй элемент является скаляром, определяющим значение по умолчанию разреженной матрицы. Каждый последующий элемент вектор ячейки представляет собой трехэлементный вектор, представляющий один элемент разреженная матрица, которая имеет значение, отличное от значения по умолчанию. Три элементами являются индекс строки, индекс столбца и фактическое значение. Напишите функцию под названием "sparse2matrix", которая принимает один вход вектор ячейки, как определено выше, и возвращает выходной аргумент, называемый «матрица», матрица в ее традиционной форме. Рассмотрим следующее бегать:

cellvec = {[2 3], 0, [1 2 3], [2 2 -3]};

матрица = sparse2matrix(cellvec)

матрица =

 0      3      0
 0     -3      0

Всем доброе утро/день/ночь

Мне было интересно, не могли бы вы помочь мне с этим.

Я пытаюсь завершить это, но я не уверен, как с этим справиться. Я понимаю, что меня интересует первая часть вектора ячеек, но я не уверен, как сказать Matlab, что мне это нужно. Это мой код:

function matrix = sparse2matrix(x)

A = [2 3];
B = 0;
C = [1, 2, 3];

x = {A, 0, C};

matrix = cell2mat(x);

end

Результат этого кода отличается от результата, который я показал выше. Я не получаю правильного ответа и, честно говоря, не знаю, что делать, поэтому я был бы признателен, если бы вы немного помогли мне.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
200
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не самый элегантный способ сделать это, но он выполняет свою работу. Использует функцию cell2mat() и индексирование для получения необходимых значений для каждого шага. Затем цикл for используется для получения трехэлементных векторов, которые используются для изменения значений массива по сравнению со значениями по умолчанию в соответствующих индексах.

cellvec = {[2 3], 0, [1 2 3], [2 2 -3]};

[matrix] = sparse2matrix(cellvec)


function [matrix] = sparse2matrix(x)
Matrix_Size = cell2mat(x(1,1));
Matrix_Height = Matrix_Size(1);
Matrix_Width = Matrix_Size(2);

Default_Value = cell2mat(x(1,2));
matrix = Default_Value*ones(Matrix_Height,Matrix_Width);

Triplets = x(3:end);
Number_Of_Triplets = length(Triplets);

for Triplet_Index = 1: Number_Of_Triplets
    
    Current_Triplet = cell2mat(Triplets(1,Triplet_Index));
    Row = Current_Triplet(1,1);
    Column = Current_Triplet(1,2);
    Value = Current_Triplet(1,3);
    matrix(Row,Column) = Value;
    
end
end

Объяснение:

Первая строка в локальной функции sparse2matrix() указывает на получение строки 1, столбца 1 массива ячеек x и последующего преобразования его в матрицу. Преобразование выполняется с помощью функции cell2mat().

Matrix_Size = cell2mat(x(1,1));

Результат:

Matrix_Size = [2 3]


Следующая строка указывает на получение индекса 1 предыдущего массива Matrix_Size. Это будет использоваться для определения высоты выходного массива matrix. Это делается аналогичным образом для оценки Matrix_Width с использованием индекса 2.

Matrix_Height = Matrix_Size(1);

Результат:

Matrix_Height = 2

Выполнено с использованием MATLAB R2019b

Привет! Большое спасибо, что ответили мне! Я терял надежду, но теперь я чувствую себя немного лучше, потому что кто-то помогает мне. Однако можно вопрос? Я не слишком знаком со всем, что вы здесь использовали, и я хочу понять. Например, мне непонятно, что означает cell2mat(x(1,1))... Можно ли объяснить, что это за 1,1? Вы можете не отвечать, очевидно, может быть, это глупый вопрос для вас, но в случае, если вы хотите, я с нетерпением жду вашего ответа. Надеюсь, у вас все сегодня хорошо.

attain 22.12.2020 20:46

Я добавил небольшое объяснение, надеюсь, это прояснит первые две строки кода.

MichaelTr7 22.12.2020 23:02

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