Как перемножить матрицы в wolfram mathematica

GeekBrains

Как вставить столбец в матрицу, правильный путь Mathematica

Я думаю, что Mathematica смещена в сторону строк, а не столбцов.

Учитывая матрицу, вставить строку кажется простым, просто используйте Insert[]

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

Первый метод

Нужно сделать двойное транспонирование:

Второй метод

Используйте SparseArray, но нужно следить за индексами. Как-то неловко делать это:

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

Использование функций массива и таблицы в Mathematica. Что лучше всего, когда

Я был в основном пользователем табличных функций в mathematica. Однако я заметил, что в нескольких примерах, где я использовал Array вместо Table для выражения того же результата, он работал заметно быстрее, особенно по мере увеличения размера таблицы.

Итак, мой вопрос таков: когда скорость выполнения является основной проблемой, когда наиболее целесообразно использовать таблицу?

что объясняет эту разницу?

Я предполагаю, что, поскольку массивы предполагают функциональная связь между элементами в списке, он хранит их более эффективно, поэтому использовать меньше памяти, тем самым облегчая хранение и последующую обработку?

Это то, что происходит?

5 ответов

Array не имеет никаких преимуществ по сравнению с Table . Между ними есть различия, которые делают одно предпочтительнее другого.

редактировать несколько человек отметили, что Table медленнее на многомерных массивах. Все они использовали переменную для хранения размера таблицы. Table и HoldAll атрибуты и только автоматически оценивает внешнюю границу взаимодействия. Поскольку внутренние итераторы остаются недооцененными, элемент таблицы не компилируется. Использование явных чисел или With С результатом в авто-компиляции:

The Array позволяет создавать массив значений функций так же, как Table . Они принимают разные аргументы. Array принимает функцию:

в то время как таблица принимает явную форму:

Array можно переходить только через обычные массивы, в то время как Table может делать произвольные итерации по списку:

иногда Array может быть больше краткий. Сравните таблицу умножения:

GeekBrains

Array позволяет создавать выражение с любой головой, а не только список:

по умолчанию глава h выбирается List в результате чего создается регулярный массив. Таблица не обладает такой гибкостью.

Майкл Тротт в Программирование (стр. 707 — 710) рассмотрим вопрос о различиях между Array и Table и утверждает, что как Table атрибут HoldAll он вычисляет свой аргумент для каждого вызова, тогда как Array " насколько это возможно " вычисляет свой аргумент только в начале. Это может привести к различиям в поведении, а также скорость.

Майкл Тротт использует следующие примеры, чтобы проиллюстрировать разницу в скорости и поведении. Я беру их дословно из его книги (диска). Надеюсь, я не нарушаю никаких правил.

(обратите внимание на разницу в поведении)

чтобы проиллюстрировать эффект предварительного вычисления первого аргумента, он использует следующий пример (снова дословно, стр. 709).

(я использую mma7 на Mac. Моя копия Программирование использует У5.1. Там вполне может быть обновление для этого)

это не единственная разница между Array и Table обсуждали в Программирование, конечно.

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

одной из причин Array может быть быстрее, что он часто компилирует свой первый аргумент лучше.

В Mathematica 7:

таким образом, можно сделать вывод, что Array и Table должен компилироваться в той же точке.

но давайте попробуем. Я буду использовать Тимо timeAvg функции:

мы видим, что массив может составить Mod[#^2, 5]*(1 + #2) & пока Table не может compile Mod[i^2, 5]*(1 + j) и поэтому Array становится быстрее, когда CompileLength достигается. Многие функции не столь благоприятны. Если вы просто измените умножение на деление в функции, что приведет к рациональному, а не целочисленному результату, то эта автоматическая компиляция не произойдет, и Table быстрее:

но что, если мы можем сделать это скомпилировать? Если мы используем числа с плавающей запятой, начнем с 1. , мы получим Real выход, который может быть составлено:

Wolfram-Mathematica – вопросы и ответы – страница 38

progi.pro – один из крупнейших сервисов вопросов и ответов по программированию. У нас вы можете найти вопросы по языкам программирования Javascript, PHP, Java, C#, Python и многим другим.

А так же делитесь знаниями, знакомьтесь с новыми утилитами и приложениями, учитесь у всегда готовых помочь ответить на самые сложные вопросы во всех сферах IT и программирования. Станьте гуру и экспертом разработки ПО, получите признание коллег, заработайте репутацию, создайте стартап или приложение которое будет работать на вас!

GeekBrains

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *