Почему эти две матрицы не эквивалентны?

Предположим, у нас есть 3-х мерный массив F и 2-х мерная матрица S. Сначала я нахожу матрицу Y, которая умножается на F на S. Затем я пытаюсь найти оценку F (назовем его F_est) из Y в качестве проверки работоспособности в моем коде. Может ли кто-нибудь увидеть ошибку в логике, я, кажется, не знаю, почему F_est не совсем F.

F= randn(2,4,600);
S= randn(4,600);
for i =1:size(F,1);
    for j=1:size(F,2)
        for k= 1:size(F,3)
            Y(i,k)= F(i,j,k) * S(j,k);
        end
    end
end

for i =1:size(F,1)
    for j=1:size(F,2)
        for k= 1:size(F,3)
            F_est(i,j,k)= Y(i,k) / S(j,k);
        end
    end
end

затем я пытаюсь проверить, равен ли F_est - F нулю, а это не так. Любые идеи. Очень дорого.

**** РЕДАКТИРОВАТЬ после комментариев

На основании полученных ответов мне интересно, имеет ли смысл приведенный ниже код?

for k=1:size(F,3)
Y(:,k) = squeeze(F(:,:,k)* S(:,k)
end

Могу ли я восстановить F, если у меня есть Y и S?

можешь показать числовой пример?

Ander Biguri 27.07.2018 00:21

Спасибо @AnderBiguri, поэтому в этой части более крупного кода у меня есть файлы mat, которые вводят F и S, но я отредактировал вопрос с помощью randn, и все же мое странное наблюдение сохраняется

Tyrone 27.07.2018 00:25

Если «не ноль» находится в районе 1e-12: stackoverflow.com/questions/686439/…

Andras Deak 27.07.2018 00:26

@AndrasDeak это не то

Ander Biguri 27.07.2018 00:27

@AndrasDeak нет, на самом деле это не так уж и мало, вы можете попробовать код. Благодарность

Tyrone 27.07.2018 00:28
Y(i,k) сохраняет последнее значение относительно j. Это, вероятно, непреднамеренно и ошибка. Вы не можете воссоздать F из этого.
Andras Deak 27.07.2018 00:30

@AndrasDeak не уверен, что понимаю, Y не является функцией j, правильно?

Tyrone 27.07.2018 00:34

Я хочу сказать, что Андер объяснил в своем ответе ниже.

Andras Deak 27.07.2018 00:34

@AndrasDeak Я думаю, вы говорите о другом

Tyrone 27.07.2018 00:51

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

Andras Deak 27.07.2018 00:58

@AndrasDeak, это по той же причине, что объяснил Андер? Благодарность

Tyrone 27.07.2018 01:08

Нет, причина не в том. В первом фрагменте кода вы выполнили поэлементное умножение, но не сохранили все результаты, поэтому вы потеряли данные. В последнем фрагменте кода вы используете умножение матриц, которое включает в себя умножение и сложение значений. Выходные данные теперь содержат данные, сгенерированные с использованием всех ваших входных матриц, но вы по-прежнему не можете отменить операцию, потому что обратная система уравнений является недоопределенной.

Cris Luengo 27.07.2018 02:43
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
T - 1Bits: Генерация последовательного массива
T - 1Bits: Генерация последовательного массива
По мере того, как мы пишем все больше кода, мы привыкаем к определенным способам действий. То тут, то там мы находим код, который заставляет нас...
Что такое деструктуризация массива в JavaScript?
Что такое деструктуризация массива в JavaScript?
Деструктуризация позволяет распаковывать значения из массивов и добавлять их в отдельные переменные.
1
12
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Когда вы создаете Y, вы постоянно меняете его значения. При любом значении пары i,k вы перезаписываете Yj раз!

Эти 2 кода не эквивалентны, поскольку F_est(i,j,k) вычисляется только один раз, но у вас есть Y(i,k)j раза.

Я не знаю, что вы пытаетесь сделать, но умножение 3D-матрицы на 2D-матрицу не определено, и это не 2D-матрица

Вы говорите, что Y содержит только информацию из 2D-плоскости F(:,size(F,2),:), поэтому остальная часть F не может быть восстановлена.

Cris Luengo 27.07.2018 00:41

@CrisLuengo действительно. Это просто плохая математика, вы не можете перемножить эти вещи вместе.

Ander Biguri 27.07.2018 00:42

Что ж, технически можешь. Это просто ничего не значит. :)

Cris Luengo 27.07.2018 00:43

@AnderBiguri, спасибо! Я редактировал вопрос. Не могли бы вы помочь мне с последней частью?

Tyrone 27.07.2018 00:46

@Tyrone Это имеет смысл только в том случае, если вы пытаетесь объяснить, что делаете. Однако учтите, что то, что вы предлагаете, неверно с математической точки зрения и не имеет ничего общего с кодом. Вы не можете умножить 3D-матрицу на 2D-матрицу.

Ander Biguri 27.07.2018 01:03

Поэтому я предполагаю, что не могу также умножить 2D-матрицу на 1-мерную матрицу, как я сделал в этом небольшом фрагменте кода, который я добавил позже после редактирования.? Спасибо

Tyrone 27.07.2018 01:07

@AnderBiguri относительно моей обновленной части, просто интересно, могу ли я восстановить F, учитывая Y и S?

Tyrone 27.07.2018 01:10

@Tyrone Вам нужно выйти из кода и вернуться к бумаге. Вы не можете создать Y, поэтому нет, вы не можете восстановить F. Прекратите пробовать случайный код. Если вам нужна помощь, я предлагаю вам открыть новый вопрос, объясняющий реальную проблему, которую вы пытаетесь решить, а не код, который вы пытаетесь решить.

Ander Biguri 27.07.2018 01:12

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