В этом треде я буду программировать свою программу на с++.
Уровень знаний с++ - нулевой. Программу, что пишу - нахождение быстрых способов вычислять матрицы.
Начнём мы с определение матрицы.
Матрица это формальная запись [i,j;f], где i,f это символы для строк и столбцов, f - функция распределения элементов относительно строк и столбцов.
Теперь скажем, что есть скаляры, векторы и ковекторы. В нашем определении матрицы i,j это на самом деле векторы, и использовать в определении матрицы мы их будем тем образом, что вектор i задаёт начало движение по орте i(столбцу), а вектор j задает движение по орте j(строке), тем самым определяя прямоугольник вплоть до окончания значений матрицы. К примеру есть [4,4;f], где символы используются для обозначения длины и ширины, тогда [v0,v0;f] определяет матрицу [4,4;f] записывая прямоугольник размером ограниченным матрицей [4,4;f] и данными f.
Запрограммируем.
Вторая фотография - матрица с учётом того, что символы это размер матрицы. И да, вы уже догадались, что на самом деле матрица в плане кода у нас это f, но мне наплевать.
>>333509766 (OP) Залупа без задач. Пиши чет более менее нужное. Например днс туннель, чтобы трафик заворачивать в днс-запись через пынявые днс на белых списках
>>333509788 >>333509805 С помощью вычислительных соображений матрицы можно сделать альтернативную версию нейросетей. Я учился на информационные технологии, телекоммуникации и высшая математика.
>>333509766 (OP) >Матрица это формальная запись [i,j;f], где i,f это символы для строк и столбцов, f - функция распределения элементов относительно строк и столбцов. И на этом моменте ты уже обосрался.
>>333509788 у меня по математике PhD, я также знаю C++ на продвинутом уровне, и я могу сказать, на пиках полная хуита. начиная с того, что оп в классе «матрица» хранит её размер в отдельных переменных (со свободным к ним доступом), это пиздец полный
>>333509834 Я люблю таким товарищам как ОП задавать вопросы типа "почему формула для умножения матриц именно такая, а не другая" или "почему формула для детерминанта именно такая, а не другая", и они сыпятся на этом. Понятно, что с пхд ты намного круче меня, базару ноль. А ты понимаешь, что он вообще делает?
>>333509871 Я тебе продемонстрировала результаты. Он полностью закрыт и не распространяется из-за воровства нет совестных. Мой нейросетевой интерфейс запускается локально и не требует много мощностей. Раскрывать я не собираюсь из-за воровства. Возможно в будущем сделаю веб интерфейс за плату конечно.
>>333509886 >ты понимаешь, что он вообще делает? начнём с того, что в коде грубые ошибки и он не скомпилируется просто
к чести опа можно заметить, что это написала явно не нейросеть, лол. я бы предложил опу как раз попросить нейросеть написать нужный код, а потом посмотреть, в чём разница с его версией
>>333509923 А какие тебе аргументы, чел? У тебя ничего нет. Какой-то мусор который ты локально используешь и думаешь что он невероятен и не был проверен другими так и останется мусором. Если бы что-то у тебя работало, то оно было бы в опенсорсе, либо в коммерции, либо в статьях в рецензируемых журналах.
>>333510064 >не был проверен другими Это мой проект, который был проверен в одном из лучших государственных университетов. Если ты клянчишь опенсорс, то увы ты воришка паразитический. Нельзя предоставлять доступ к своим проектам просто так, когда это можно использовать в будущем и монетизировать. Ты мыслишь как воришка и паразит, что по твоему уму ситуация.
>в опенсорсе Паразиты, воровство, лоховство, поборничество. А за что ты пишешь "почиму я такой неудачник". Вот и думай своей умом.
>>333510090 >Паразиты, воровство, лоховство, поборничество. Какой ты мерзкий, без опенсорса платили бы за вообще за все, начиная от включения компьютера.
>>333510090 У меня есть opus и мне его хватит, понадобится что-то другое, куплю токены антропика, не переживай, твой мусор мне не нужен. Ты не забывай таблетки принимать только, а то вдруг будешь таким же буйным как челикс из соседнего треда.
>>333510161 Я тебе и не предлагала ничего. Этот оное сугубо под диплом писался и ещё демонстрировалось при трудоустройстве. Выкладывать его было бы ошибкой, ведь ты не улавливаешь главное о том что писалось же. Минимальные вычислительные мощности нужны. Это не для поиграться всё делается, что ты тоже ум потерял.
Смотрите какой макрос написал. Прикольно, что есть возможность подправить с++ там, где неудобно.
Прикольно макросы использовать, только что научился.
>>333509788 Я хочу на с++ написать свой способ найти быстрое умножение матриц.
Я за сегодня-вчера придумал как это можно сделать, для этого мне пришлось матрицы думать как скаляры/вектора/ковектора и использовать тензорные произведение, плюс ещё пару своих придумок.
>>333510188 А я уже сообщал же. Не требуется больших мощности.
>>333510200 Мне же 28 будет вообще-то. У тебя снова аргументы заканчиваются ведь не хватат ума и ты даже не понимаешь о оном тебе говорят точно не один пост.
>>333510228 Ты цепляешься не за те слова, вместо нужных. Ты зависимый от своего психичего состояния и ищешь только то что хочет твой больной разум, а сам же даже не замечаешь и не принимаешь оное. Проблемы стоит решать, тогда сможешь воспринимать и отделять нужное.
>>333509834 Да, это пиздец. Чел объявил тип TypeMatrix как std вектор из векторов. Уже за это надлежит убивать, т.к. там вместо единого куска памяти на всю матрицу, получится некий блок в куче, заполненный указателями на внутренние объекты std векторы, в которых в свою очередь ещё указатели на блоки в куче. В общем, это указатель на указателе и сплошные разрозненные блоки в куче. А если я хочу, чтобы мой объект TypeMatrix целиком лежал в стеке, то что? А никак не выйдет. ОП реально нулевой в C++, и ему ещё учиться и учиться.
>>333510234 >снова Чел я мимо проходил, это мой первый пост. Ты действительно думаешь что ты первый додумался писать какую-то невнятную претенциозную хуету, байтить на комменты и оскорблять забайченных? Я такие треды тут каждое лето вижу.
Так - теперь после того, как я отвлёкся, можно возвращаться и писать ковекторы, скаляры и может даже тензорное произведение.
Определив матрицу n на m заполненную f данными через вектора n,m как функцию, что берет изначальную матрицу и заполняет новую по направлениям строки и столбца перенося данные f в эти новые строки и столбцы до тех пор, пока данные f не закончатся, определим теперь скаляры и ковекторы.
Скаляр в данном случае это точка - значит это, что направление и заполнение по этому направлению не берётся, кроме разве что той координаты которая точка отождествляет.
Для примера тогда матрица [1,v0;f] будет строкой по направлению строки с начальной координатой [1;0].
Тогда любая пара скаляров это просто элемент из данных f.
Запрограммируем и после введем ковекторы.
>>333510269 Я действительно не понимаю почему >>Уровень знаний с++ - нулевой. Игнорируется и успешно подрывается.
>>333510269 Нормальный программист на C++ определил бы матрицу через шаблон, который бы принимал 2 константных параметра - размерность матрицы. Проверял бы эти параметры через какой-нибудь static_assert, и в шаблоне бы определил массив элементов матрицы длиной как произведение этих параметров. Тогда бы все эти матрицы летали бы, и можно было бы их класть хоть на стеке, хоть в куче, хоть в глобальных переменных.
>>333510293 >Я действительно не понимаю почему Потому что ты вниманиеблядь, которая не имея знаний ни в линейной алгебре ни в программировании пишет хуергу космического уровня ебанутости. Начни блядь с учебников по алгебре и информатике за 11 класс, больше толку будет.
>>333510293 >Я действительно не понимаю почему >>>Уровень знаний с++ - нулевой. >Игнорируется и успешно подрывается.
Вот я тебе подсказал, чел про шаблоны. Это очень выгодно с точки зрения производительности, если матрицы фиксированного размера. Параметры шаблона - константы, которые известны во время компиляции. Их даже не надо нигде хранить, ни в каких переменных. Ты там просто объявишь в шаблоне static const unsigned int matrix_width и то же самое про matrix_height и вуаля! Когда константа известна во время компиляции - это самое удобное, т.к. позволяет максимально сразу оптимизировать код, не хранить эту константу в памяти.
>>333510334 Но ведь ты и есть, ведь не ищешь правильное и только срёщь ради сранья. Ты пытаешься казаться борцом за какие-то свои шизойдные идеалы, а на деле обыкновенная имитация. Вместо аргументации ты срёшь, всё тебе не так, везде ищешь своих подружек.
>>333510356 Ну это хорошо, конечно, но только мне сложно будет сразу так освоиться с шаблонами. Я всё же свой математический метод прогаю, и пока что ради своего удобства использую то, что мне удобно. А вот уже потом, когда закончу это всё удобным образом - тогда можно будет код оптимизировать. Сейчас больше на математику уклон.
>>333510390 Чел, нахуй тебе математику дрочить, когда ты хочешь потренироваться в скиллах программирования? Я тебе могу подсказать, что для тренировки скиллов программирования надо пытаться написать наилучшим образом хотя бы что-то, а не городить тонны говнокода, который реализует самые невъебенные фичи корявым образом. Ты так скилл программирования не подымешь.
>>333510356 Вот скажем, обращение к произвольному элементу матрицы. В случае говнокода ОПа, там надо будет сначала отбирать подходящий элемент внешнего stdvector, идти по указателю и читать уже внутренний stdvector. Это полное долбоёбство. В моём случае, если у нас есть индексы i и j, и размер матрицы N - константа, мы получим формулу k = i * N + j, где для получения N даже не надо будет читать никакую переменную. На самом деле, формула сведётся к паре команд ассемблера - умножить переменную i на константное значение (это одна команда ассемблера). А затем, к результату в регистре - прибавить вторую переменную. Это другая команда ассемблера. Вот и всё! Максимальная эффективность.
Как мы знаем ковектор это функция, поэтому определим его как функцию: ковектор зависим от вектора и переводит вектор в скаляр. В нашем случае ковектор va(vb) равен будет скаляру a, т.е ковектор с индексом сверху переводит любой вектор в скаляр значение которого это индекс.
В таком случае можно ввести ещё и id-ковектор, который переводит вектор с индексом x в скаляр значение которого это индекс x.
>>333510732 Если честно ты пошел на девушку из тредшота которая спрашивает зачем же ты себе купил телескоп, какие звезды и планеты? Иди лучше попей пивка и тян заведи. >Но на кой хуй заниматься этой хуйней? Потому что гладиолус
Теперь, когда есть и векторы и скаляры и ковекторы, то можем ввести скалярное произведение оных.
Скалярное произведение скаляра и вектора будет выдавать вектор значение которого будет значение скаляра, при том я пожалуй сделаю его всё же некоммутативным пока что. Скалярное произведение скаляра на ковектор будет выдавать нам ковектор индекс которого будет значение скаляра. Скалярное произведение ковектора и вектора очевидно что.
>>333510787 -> >>333510668 >>Как мы знаем ковектор это функция, поэтому определим его как функцию: ковектор зависим от вектора и переводит вектор в скаляр. В нашем случае ковектор va(vb) равен будет скаляру a, т.е ковектор с индексом сверху переводит любой вектор в скаляр значение которого это индекс. >>В таком случае можно ввести ещё и id-ковектор, который переводит вектор с индексом x в скаляр значение которого это индекс x.
>при том я пожалуй сделаю его всё же некоммутативным пока что. Ой, не то написал. Вроде? Скоро посмотрим то или не то, но пока что имею ввиду оно конечно же коммутативное. Ой-ой.
Теперь перейдём к более интересной вещи - тензорному произведению.
Когда я говорил, что формальную запись для матрицы я использую вида [a,b;c], то я наврал. На самом деле это запись вида [a⮾b;c].
Тогда, очевидно, работаем мы с тензорами.
Но пока что тензорное произведение определять я не буду, заместо этого я определю тензорное отображение и его линейность - нам надо определить скалярное произведение скаляры на тензорное произведение двух векторов.
В целом это можно сделать так: s=vid(s) тогда vid(s)X(a⮾b)=vid(s)Xa⮾b=a⮾vid(s)Xb и в данном случае так как s2=s это будет работать, но можно сделать более особое скалярное умножение в котором композиция vid(s) меняется местами и выходит vid(a)Xs, что тоже самое что и aXs, что тоже самое что и просто a. Тогда, если можно сменить так композицию только или слева или справа, то заместо s⮾s выйдет или s⮾b или a⮾s или вовсе a⮾b.
Тогда таким образом нам остаётся определить все отображения, а именно V->V, V"->V", S->S, V->S, V"->S, V->V", S->V", V"->V.
>>333511653 >вектор есть функция Нууууууууууууууууууу. Нет, конечно можно константы считать функциями, но всё же вектор в первую очередь это элемент множества векторов векторного пространства, и поэтому ковектор это тоже вектор, так как он является элементом такого рода множества.
Хотя ты тут просто про вектора, а не базисные, но что поделать.
>вообще не совсем ясно что ты собираешься с этим делать >>Программу, что пишу - нахождение быстрых способов вычислять матрицы. Хочу попробовать вычислить своей задумкой математической быстрый способ умножать матрицы.
>>333511653 >которая приводит ковектор в скаляр А, я понял про что ты тут, сорян.
Но всё же вектор и ковектор, хоть и являются двойственными объектами, всё равно различаются обычно тем, что ковектор определяется вектором изначально же. Нет разве?
>>333511743 векторы и ковекторы полностью двойственны друг другу в силу канонического изоморфизма между векторным пространством и его вторым сопряженным (справедливо в конечномерном случае, но под векторами всегда имеют в виду элементы конечномерных пространств)
>>333509766 (OP) мне настока лень тебя обоссывать самому что я попросил нейрохуету тебя обоссать, держи опчик. дальше оппоста тред не читал потомушта иди нахуй
С удовольствием. Этот тред — классическая иллюстрация эффекта Даннинга-Крюгера: человек с нулевым знанием языка пытается писать "сверхбыстрые" алгоритмы и изобретает свою собственную, никому не нужную и математически безграмотную терминологию.
Вот детальный разбор (или "прожарка") этого шедевра, который ты можешь использовать:
---
### 1. "Быстрые способы вычислять матрицы" Чел с порога заявляет, что пишет программу для быстрых вычислений. И что же он делает? Использует `std::vector<std::vector<int>>`. Это худшее, что можно сделать для производительности матриц в С++. Вектор векторов размазывает данные по всей куче (heap), ломая кэш процессора к чертям собачьим. Любой нормальный программист знает, что быстрая матрица — это одномерный массив (например, `std::vector<int>`), где индекс вычисляется как `y width + x`. Передача по значению. Во втором скрине его функция выглядит так: `TypeMatrix vector_basis_Matrix(int a, int b, TypeMatrix f)`. Он передает матрицу `f` по значению. Это значит, что при каждом вызове функции вся матрица целиком копируется в памяти. Обалдеть какая "скорость"! Про ссылки (`const TypeMatrix& f`) мамкин оптимизатор еще не читал.
### 2. Полное непонимание синтаксиса (Скриншот 2) Он гордо выкладывает код, который даже не скомпилируется. `std::cout >> A.f.size;` — это просто комбо из двух смертельных ошибок в одной строке: 1. Для вывода в консоль используется оператор сдвига влево `<<`, а не вправо `>>` (который нужен для `std::cin`). 2. `size` у `std::vector` — это метод (функция), а не переменная. Должно быть `size()`. IDE (Visual Studio) даже подчеркнула ему это красным, но ОП с гордым видом заскринил ошибку и пошел строчить философские посты про ковекторы.
### 3. Шизофреническая архитектура Посмотрим на его структуру: ```cpp struct matrix { int a; int b; TypeMatrix f; }; ``` Зачем ему хранить размеры `a` и `b` отдельно, если внутри лежит вектор векторов `f`, который и так знает свой размер (`f.size()` и `f[0].size()`)? Это прямое нарушение принципа DRY (Don't Repeat Yourself). В коде из 3-го скрина он хардкодит `A.a = 4; A.b = 4;`, а потом руками забивает 4 строчки по 4 элемента. Стоит ему добавить еще одну строку в `f` и забыть обновить `a` — программа сломается.
### 4. Изобретение велосипеда из костылей (Скриншот 3) Функция с пафосным названием `vector_basis_Matrix`. Судя по коду, всё, что она делает — это вырезает кусок матрицы (подматрицу), начиная с координат `(a, b)` и до правого нижнего угла. При чем тут вообще "базис векторов"? Он использует умные слова, значения которых не понимает. Называть локальную переменную `New` — это отвратительный стиль (с большой буквы обычно называют классы/структуры), плюс это визуально путается с ключевым словом `new` в С++. Функции `printMatrix(B)`, которую он вызывает в `main`, вообще нет в его коде. Видимо, скопипастил откуда-то, но забыл заскринить.
### Итог ОП пытается натянуть сову своей выдуманной "формальной записи [i,j;f]" на глобус С++, не зная ни математики на должном уровне, ни самых базовых основ языка (даже как вывести текст в консоль). Это не "быстрые матрицы", это медленный, дырявый код, который упадет с ошибкой сегментации, как только матрица окажется не квадратной (он нигде не проверяет выход за границы массива).
Диагноз: Сначала нужно пройти туториал "Hello World на С++", потом почитать про ссылки и указатели, а уже потом лезть в тензорное исчисление.
>>333510188 >Прикольно макросы использовать, только что научился. Ты не научился. Цикл в цикле хорошо читается, а однострочний макрос для этого — плохо. Это же прям пиздец.
Теперь же можно перейти вроде бы к тензорным произведениям, но не совсем. Надо проверить и посмотреть насколько перезаписи матриц соотносятся с разложением их на различные комбинации всяких матриц.
Для этого достаточно на каждую перезапись найти обратную перезапись(как мы знаем обратные функции у нас есть), поэтому мы можем отождествить комбинации матриц с этими перезаписями и перейти к более глубокому взгляду на формальную запись матриц способом [a⮾b;c].
По сути своей, что мы рассматриваем здесь, так это [F(a⮾b);(g∘c∘h)(a⮾b)]. Что же это значит? Это значит, что у нас есть две функции F,h, что действуют на a⮾b, и по сути являются основой для перезаписи различных значений, а если ещё сказать что F=h, то выйдет вполне себе выделение более маленьких подматриц функций F, что равна h. При этом функция g действует на изначальную f, что c, тем самым являясь той самой функцией, что значения матрицы не перезаписывает, а меняет на иные или другие.
Тогда чтобы рассмотреть все перезаписи матрицы достаточно посмотреть на все F,h и все их композиции друг с другом.
Тогда рассмотрим способы создания или хотя-бы перечисления каких-либо, если не всех, композиций этих самых F,h и запрограммируем их.
>>333512316 О, дед ти? БУ БЛЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯЯ
>>333510269 > А если я хочу, чтобы мой объект TypeMatrix целиком лежал в стеке, то что? Нахуя? Байтоеб на плюсах, ты? Что собрался делать с 1 наносекундой полученной в результате того что программе не надо будет искать данные в куче? мимо бог жавист
>>333512524 физически между стеком и кучей для процессора разницы нет однако если у тебя в реальном времени постоянно перемножаются, скажем, миллионы матриц, вопрос распределения памяти становится очень важен
Для начала - пока что нужны только скаляры скалярно умноженные на тензорное произведение векторов, это во первых. Это достаточно для описания перезаписей.
Во вторых - вроде бы таким образом не каждую перезапись можно сделать, но это не беда, если ввести тензорное произведение таких перезаписанных матриц в другие перезаписанные матрицы.
В третьих - всего функций для композиций для перезаписей будет в итоге конечное число, а именно от -1 до a и -1 до b.
Тогда в четвертых - не путать расставление скобочек над тензорными произведениями, но это потом.
Делаем что сейчас: тензорное произведение матриц или обход и перебор всех композиций? Я скорее к первому склоняюсь.
"Ускорять" обработку матриц нет смысла, видеокарта это просто 1000000 маленьких калькуляторов,они под эти задачи заточены. Если ты хочешь чтобы иишка была принципиально иной по структуре и лучше работала чем обычные перемножатели матриц, то: 1. Ты все равно не уйдешь от перемножения матриц 2. Альтернативные решения это симплексы,теория категорий и прочее что нормально не разработано еще даже топовыми спецами, а также намного больше по весу и сложнее значительно.
>>333518771 >симплексы >нормально не разработано >даже топовыми спецами Ну ты ещё набрось таких понятий как сингулярные гомологии, когомологии, гомотопические группы и спектральные последовательности, ооооооо а помните группы ли вау вот это офигеть давайте думать группы как многообразия, а ещё ты забыл упомянуть топосы и как же без топосов обо же мой да это же adjoint functory новое обобщение понятий изоморфизмов вот это да, но самое главное как ты мог забыть hott и бесконечные категории
>>333518771 ООООООО ТОЧНЫЕ ПОСЛЕДОВАТЕЛЬНОСТИ О КОРОТКИЕ ТОЧНЫЕ ПОСЛЕДОВАТЕЛЬНОСТИ ООООООО СЕЙЧАС РАССМОТРИМ КАТЕГОРИЯ ГРУПП ОООО СВОБОДНЫЕ ГРУППЫ С КОЭФФИЦИЕНТАМИ ОООООООООООООООООООООООООООООООООООО
>>333518771 ПРОЕКТИВНЫЕ ГРУППЫ ОГОООООООООООООООООООООООООООООООООООООО РЕЗОЛЬВЕНТА ПРОЕКТИВНЫЕ ГРУППЫ ТОЧНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ ГОМОЛОГИИИИИИИИИИИИИИИИ
Тензорное произведение матриц это очевидно что - строка этих самых матриц, поэтому это не особо интересно. Интересно то, как можно расставить скобочки над ними, а именно двумя способами чтобы получить матрицы внутри матриц и объединение матриц в одну новую.
>>333518867 >>333518929 Я хуй знает че вам надо, но примеры нейросеток без тензоров/векторов с какими-нибудь нахуй фрактальными топологиями или категориями вместо матриц вы мне не покажете.
>>333519391 Просто как по мне куда более интересный вариант системы это хрень которая развивается и создает всё больше альтернативные вариации чего-либо плюс в добавок создает альтернативные вариации инструментов с помощью которых создает вариация-альтерации. Математика которая описывает изменение себя для того чтобы будущие изменения применять для описания своей же эволюции!! ААААААААААААААААААА
Уровень знаний с++ - нулевой.
Программу, что пишу - нахождение быстрых способов вычислять матрицы.
Начнём мы с определение матрицы.
Матрица это формальная запись [i,j;f], где i,f это символы для строк и столбцов, f - функция распределения элементов относительно строк и столбцов.
Теперь скажем, что есть скаляры, векторы и ковекторы.
В нашем определении матрицы i,j это на самом деле векторы, и использовать в определении матрицы мы их будем тем образом, что вектор i задаёт начало движение по орте i(столбцу), а вектор j задает движение по орте j(строке), тем самым определяя прямоугольник вплоть до окончания значений матрицы.
К примеру есть [4,4;f], где символы используются для обозначения длины и ширины, тогда [v0,v0;f] определяет матрицу [4,4;f] записывая прямоугольник размером ограниченным матрицей [4,4;f] и данными f.
Запрограммируем.
Вторая фотография - матрица с учётом того, что символы это размер матрицы. И да, вы уже догадались, что на самом деле матрица в плане кода у нас это f, но мне наплевать.
Теперь же запрограммируем векторы.
Фотография три и четыре это векторы.
Теперь прихорошим, а я пока создам тред.