реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> scilab vs python, что выбрать?
serjj
сообщение Dec 26 2014, 13:47
Сообщение #16


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



Про питон ничего сказать не могу, но Scilab вполне пригоден для моделей малой и средней сложности. Он довольно шустрый и начиная с 5.4 обзовелся нормальной мордой, неплохая стандартная библиотека (полная поддержка матричных вычислений, фильтрация/свертка/Фурье, а остальное можно сделать самому, открыв книжку по ЦОС rolleyes.gif ). Моделировал на нем алгоритмы приёмника/передатчика, считал интерполяторы/дециматоры, соединял все это добро с HDL симулятором, работать можно. Из явных минус в сравнении с матлаб: нет fixed-point функционала, нет симулинка, нет встроенных функций помехоустойчивого кодирования (ну это проблема для меня была, не мог я сделать на нем полной модели приёмника, а кому то может и не важно это совсем rolleyes.gif )

Сообщение отредактировал serjj - Dec 26 2014, 13:48
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 26 2014, 17:23
Сообщение #17


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(Xenia @ Dec 26 2014, 16:52) *
Обмана здесь нет, т.к. в языке C++ определение операторов

А, так это вполне нормальная практика. Я Вас просто недопонял.
Скажем, мне С++ не близок, но в паскале такое не стесняюсь делать.
Go to the top of the page
 
+Quote Post
shf_05
сообщение Dec 27 2014, 10:07
Сообщение #18


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



ну маета с установкой питона!

поставил на ура питон 3.4 x64, после этого библиотеки matplotlib ipython и т.п. ни в какую не хотели вставать, и visaul studio express всех мастей поставил и SDK со всевозможными компиляторами (не пробовал только mingw и gcc, полагая, что под WIN 7x64 лучше использовать компилятор от MSVS), пробовал советы из инета - все безрезультатно.
в итоге - установил пока pyzo2014a, правда не знаю насколько это универсальная штука
коллеги, посоветуйте, пожалуйста (!) наиболее совместимую конфигурацию - версия питона, компилятор, так, чтобы созданное ПО работало в т.ч. и на других машинах - речь о WINx (чаще всего 7x64), планирую применять matplotlib, ipython, notebook...
Go to the top of the page
 
+Quote Post
Bear_ku
сообщение Dec 29 2014, 05:07
Сообщение #19


Частый гость
**

Группа: Участник
Сообщений: 154
Регистрация: 9-09-11
Пользователь №: 67 076



Python 2.7 + VCForPython27
Python 3.4 + Visual C++ 2010 Express
Go to the top of the page
 
+Quote Post
halfdoom
сообщение Dec 29 2014, 07:03
Сообщение #20


Профессионал
*****

Группа: Свой
Сообщений: 1 003
Регистрация: 20-01-05
Пользователь №: 2 072



Цитата(Xenia @ Dec 26 2014, 11:18) *
А бывают ли такие обертки для C++? Чтобы Питон не учить на C++ остаться, но так хитро определить классы (и операторы внутри них) матриц и векторов, чтобы алгебраические операции над ними можно было проиpводить в записи, приближенной к математической? Т.е. обычными 4-мя арифметическими действиями.


Приличных оберток не видел, но есть alglib от Сергея Бочканова, где есть попытки прикрутить операторы куда нужно. Поскольку там уже все в классах, то, наверное, можно попытаться расширить список операций под свои нужды.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 29 2014, 09:30
Сообщение #21


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(halfdoom @ Dec 29 2014, 10:03) *
Приличных оберток не видел, но есть alglib от Сергея Бочканова, где есть попытки прикрутить операторы куда нужно. Поскольку там уже все в классах, то, наверное, можно попытаться расширить список операций под свои нужды.


Про Alglib давно знаю и даже коллекционирую ее версии на ftp, однако стиль использования этой библиотеки мне сильно не нравится. Т.е. меня-то интересуют именно варианты "прикручивания", а не библиотеки, которые выполняют работу. Тогда как Alglib сильно "недокручена", поскольку требует явного вызова функций.

Умножение двух матриц, на мой взгляд, должно выглядеть (на C++) так:
Код
RealMatrix A(3,4), B(4,3), C(3,3);
C = A * B;

где: RealMatrix - класс с конструктором, аллокирующий для матрицы место в памяти и запоминающий обе ее размерности.
А дальше идет сплошная алгебра, по записи мало отличающаяся от математической.

В сущности все три операции (*,+,-) совершенно тривиальны - их самой написать проще, чем библиотеки подключать. А потому проблема состоит только в том, чтобы компилятор компилировал непосредственно алгебраическую запись типа C = A * B, превращая ее в вызовы функций неявно. А вот такого "счастья", которое предлагает мне Alglib, мне задарма не надо:
Код
ae_matrix A;
ae_matrix B;
ae_matrix C;
ae_frame_make(_state, &_frame_block);
ae_matrix_init(&A, 3, 4, DT_REAL, _state);
ae_matrix_init(&B, 4, 3, DT_REAL, _state);
ae_matrix_init(&C, 3, 3, DT_REAL, _state);
matrixmatrixmultiply(&A, i1, i1+row1-1, j1, j1+col1-1, trans1, &B, i2, i2+row2-1, j2, j2+col2-1, trans2, scl1, &C, i3, i3+l-1, j3, j3+r-1, scl2, &x1, _state);
Жуть! Даже не верится, что это C++. Впечатление такое, что авторы библиотеки этого языка не знают, если настолько последовательно игнорируют его возможности.
Go to the top of the page
 
+Quote Post
shf_05
сообщение Dec 29 2014, 13:42
Сообщение #22


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



Цитата(Xenia @ Dec 29 2014, 14:30) *
Умножение двух матриц, на мой взгляд, должно выглядеть (на C++) так:
Код
RealMatrix A(3,4), B(4,3), C(3,3);
C = A * B;

почему бы хотя бы не например
Код
mpy(A,B);
?

взять питон - дак вообще судя по всему для массива и матрицы у него значок * разное значит - как бы не запутаться вовсе...
Go to the top of the page
 
+Quote Post
SSerge
сообщение Dec 29 2014, 15:49
Сообщение #23


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Цитата(shf_05 @ Dec 29 2014, 20:42) *
взять питон - дак вообще судя по всему для массива и матрицы у него значок * разное значит - как бы не запутаться вовсе...

не запутаетесь, поскольку встроенных типов массива и матрицы у питона нет, а если свои определять - то как реализуете метод __mul__, так и будет.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
shf_05
сообщение Dec 29 2014, 17:02
Сообщение #24


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



Цитата(SSerge @ Dec 29 2014, 20:49) *
не запутаетесь, поскольку встроенных типов массива и матрицы у питона нет, а если свои определять - то как реализуете метод __mul__, так и будет.

я имел ввиду, если использовать Numpy http://wiki.scipy.org/NumPy_for_Matlab_Users
Go to the top of the page
 
+Quote Post
amaora
сообщение Dec 29 2014, 18:16
Сообщение #25


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Интереснее было бы компилировать код в алгебраической записи (на matlab языке или ином) в оптимальный код на C. Так, чтобы использовались известные свойства матриц. Например разреженность может заметно сократить количество операций при умножении. Матрицы могут быть симметричными, диагональными, ортогональными и т.д. Все это можно использовать при генерации оптимального по быстродействию (или другому критерию) кода. Давно ищу что нибудь подходящее. Самому за такое браться, серьезная задача.
Go to the top of the page
 
+Quote Post
Guest_TSerg_*
сообщение Dec 29 2014, 18:28
Сообщение #26





Guests






Цитата(shf_05 @ Dec 25 2014, 12:51) *
добрый день, коллеги.
..
теперь матлаб для меня закрыт, встал вопрос использовать "бесплатное" ПО,


Может заинтересует SMath?
http://ru.smath.info/
Go to the top of the page
 
+Quote Post
amaora
сообщение Dec 29 2014, 18:53
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Цитата(Xenia @ Dec 26 2014, 15:52) *
Проблему здесь вижу только в том, что в математике алгебраические операции - тернарные, т.е. в операции участвуют три объекта: между двумя из них производится операция, а в третий помещается результат. Тогда как в C++ операторы бывают лишь унарными и бинарными, а тернарных не бывает.

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

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


Те кто занимаются графикой (OpenGL/D3D), играми и близкими к этому задачами давно уже так делают. А сейчас с использованием новых стандартов наверно улучшили свои решения, сам я давно уже не слежу, что там происходит. Но у них обычно фиксированные размерности не выше 3, геометрия.
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 30 2014, 04:45
Сообщение #28


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(amaora @ Dec 29 2014, 21:16) *
Интереснее было бы компилировать код в алгебраической записи (на matlab языке или ином) в оптимальный код на C. Так, чтобы использовались известные свойства матриц. Например разреженность может заметно сократить количество операций при умножении. Матрицы могут быть симметричными, диагональными, ортогональными и т.д. Все это можно использовать при генерации оптимального по быстродействию (или другому критерию) кода.


Если матрица диагональная, то ее хранят в векторе sm.gif. А такие свойства, как симметрия и эрмитовость, обычно не позволяют ускорить операции сложения, вычитания и умножения, поскольку для этого требуется, чтобы ОБА операнда обладали таким свойством. Что же касается разряженных матриц, то это скорее не алгебраическая проблема, а ... "процессоростроительная", т.к. касается только того, способен ли FPU быстрее выполнять бинарные операции, если один из операндов нулевой. Причем, в электронной реализации (а так же на FPGA) такая проверка операндов на нулёвость не привела бы к замедлению арифметики с прочими числами, поскольку признак нулёвости регистра всегда можно сделать схемотехническим, экстренно отменяющим выполнение операции. Но если процессоростроители этого не предусмотрели, то проверять каждый операнд на нулёвость в программе будет не менее накладно по времени, чем честно умножать на нуль.

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

В конце концов, языки высокого уровня родились вместе с Фортраном, когда стало допустимо записывать арифметические операции посредством четырех операторов (+,-,*,/), используя скобки, и именно это вызывало бум! Потому как с помощью явного вызова функций можно было бы припеваючи продолжать жить на ассемблере.

Отсюда и вопрос мной поставлен так: допускает ли механизм определения операторов языка C++ определить их для матриц и векторов таким образом, чтобы три операции (+,-,*) над ними имели естественно-арифметический вид записи? Если да, то почему это до сих пор не сделано производителями библиотек линейной алгебры? А если где-то уже сделано, то где именно?
Go to the top of the page
 
+Quote Post
shf_05
сообщение Dec 30 2014, 05:40
Сообщение #29


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 22-04-08
Из: г. Екатеринбург
Пользователь №: 36 992



Xenia вы искали это?
http://www.quantstart.com/articles/Matrix-...The-Source-File
Go to the top of the page
 
+Quote Post
Xenia
сообщение Dec 30 2014, 06:00
Сообщение #30


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(shf_05 @ Dec 30 2014, 08:40) *


Нет, этого я не видела. Но даже и с вашей подачи не могу найти в этой статье место, где бы автор производил умножение C=A*B в операторном виде. Слишком ж там кода много вывалено, что пример, если он и был приведен, то там утонул.

Тогда как операции типа
A+=B
A-=B
на реализацию которых упирает автор статьи, очевидно реализуются без проблем, поскольку они бинарны, а не тернарны.
Тогда как организовать бинарным оператором операцию умножения в общем случае невозможно, т.к. там продукт может иметь иную размерность, чем каждый из операндов.
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 06:16
Рейтинг@Mail.ru


Страница сгенерированна за 0.01512 секунд с 7
ELECTRONIX ©2004-2016