Nano Hash - криптовалюты, майнинг, программирование

Можно ли сделать Tree View с помощью Angular?

Я хочу отображать данные в древовидной структуре в веб-приложении. Я надеялся использовать Angular для этой задачи.

Похоже, ng-repeat позволит мне перебирать список узлов, но как я могу выполнять вложение, когда глубина данного узла увеличивается?

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

Я почти уверен, что подхожу к этой проблеме совершенно неправильно.

Есть идеи?

07.08.2012

  • Я только что ответил на это довольно общим образом по другому вопросу: директивы"> stackoverflow.com/questions/14430655/ 20.04.2015

Ответы:


1

Взгляните на эту скрипку

Оригинал: http://jsfiddle.net/brendanowen/uXbn6/8/

Обновлено: http://jsfiddle.net/animaxf/uXbn6/4779/

Это должно дать вам хорошее представление о том, как отображать tree like structure с помощью angular. Это своего рода использование рекурсии в html!

08.08.2012
  • почему бы не указать свой источник? вы написали сообщение в этой ветке, а теперь публикуете здесь ссылку со своим именем? 23.09.2012
  • Вот идентичная версия (я думаю), за исключением того, что она загружается намного быстрее (по крайней мере, для меня), поскольку в нее не встроен Twitter Bootstrap в разделе CSS. jsfiddle.net/brendanowen/uXbn6/8 24.10.2012
  • Это просто привязывает новый экземпляр контроллера к вложенному элементу. Можно ли как-то параметризовать контроллер? И можно ли связать эти контроллеры в цепочку, чтобы в вашей бизнес-логике получилась цепочка родитель-потомок? 22.01.2013
  • Будет ли полезно использовать здесь директиву? 10.02.2013
  • Резюме: создайте ng-template, который сам ng-include, каждый из которых включает в себя переход по ветке. Великолепно! 10.04.2013
  • Вот директива для этого: /2013/06/ 28.06.2013
  • @JonathanAbrams Решение довольно хорошее, но оно отображает «ul» без дочерних элементов. Я попытался настроить его, но не смог заставить логику избежать рендеринга пустого ‹ul›. Можно ли это сделать с помощью ng-include или эта функция должна быть внутри и директивой для манипуляций с DOM? 26.07.2013
  • чувак, ты должен указать свой источник. 26.09.2013
  • Я действительно устал от людей, постоянно комментирующих это, что в URL-адресе есть мое имя (и, следовательно, это плагиат!). К сожалению, именно так работает jsfiddle. Если вы разветвляете что-то, пока вы вошли в систему, оно сохраняет ваше имя пользователя. Сказав, что теперь я связался с исходным URL. Понизьте ответ, если он неправильный. В этом сценарии ответ оказывается правильным с той единственной вещью, что резервный URL-адрес, который у меня был, кажется, содержит мое имя. 27.09.2013
  • Я только что добавил кнопку свернуть и развернуть в вашу версию: jsfiddle.net/uXbn6/639 28.11.2013
  • Попробуйте stackoverflow.com/questions/14430655/ для хорошего решения 12.12.2013
  • Как бы вы добавили кнопку «удалить текущий узел» вместо «удалить [дочерние] узлы»? Я пробовал несколько способов, но ни один из них не работает очень хорошо. 28.02.2014
  • Супер простое решение, которое действительно показывает силу angular, я хотел попытаться сделать его еще более простым, так как я чувствовал, что это немного yuk, чтобы полагаться на кеш ng-include/template для выполнения этого, когда это должно быть просто возможно непосредственно в DOM... что привело меня к созданию: github.com/dotJEM/angular-tree 09.06.2014
  • Я не понимаю этот пример. Все, что я получаю, это бесконечная рекурсия. Кажется, что каждый узел не получает свою собственную область, если дерево генерируется во время выполнения. 18.09.2014
  • Разветвил код @JohnHenckel и изменил кнопку удаления, чтобы удалить ** текущий ** узел вместо дочернего узла. jsfiddle.net/yoshiokatsuneo/12bfpvnL 30.11.2015
  • НЕ ПРИВЯЗЫВАЕТ ДАННЫЕ, тем самым побеждая цель использования angular по сравнению с языком шаблонов на стороне сервера 23.05.2016
  • Есть ли способ получить deph с помощью этого метода? 11.08.2016

  • 2

    Если вы используете Bootstrap CSS...

    Я создал простой повторно используемый элемент управления деревом (директиву) для AngularJS на основе списка навигации Bootstrap. Я добавил дополнительные отступы, значки и анимацию. Атрибуты HTML используются для конфигурации.

    Он не использует рекурсию.

    Я назвал его angular-bootstrap-nav-tree (броское название, не правда ли?)

    Пример приведен здесь, а источник - здесь.

    18.08.2013
  • Это красиво, но имейте в виду, что это не работает в ветке Angular 1.0.x. 01.09.2013
  • Да, он использует новую анимацию... требуется Angular 1.1.5 (я думаю?) 09.09.2013
  • ОБНОВЛЕНИЕ: теперь он работает либо с Angular 1.1.5, либо с Angular 1.2.0, а также с Bootsrap 2 или Bootstrap 3. 03.11.2013
  • Привет, Ник, как твоя директива. Я ищу что-то подобное, но мне нужно, чтобы у него была функция наведения. Как поступить с этим... 25.11.2013
  • @NickPerkins: я пытаюсь просмотреть ваш пример на github. Я не понимаю, как меняется treeData, когда вы нажимаете значок свернуть, развернуть. Я не вижу никаких ng-click и т. д., которые изменяют данные в $scope.treeData. Я что-то пропустил? 29.12.2013
  • @NickPerkins Привет, Ник, красивое и чистое дерево. Что я могу сделать, чтобы интегрировать флажки? 22.01.2014
  • Благодарю. если всего у меня 30к нод - можно ли привезти FE заранее? 25.02.2014
  • Только к вашему сведению, если вы используете Bower, Ник теперь сделал это доступным для простой установки - bower search angular-bootstrap-nav-tree и bower install angular-bootstrap-nav-tree --save, и все готово. 10.05.2014
  • @Nick Perkins - не могли бы вы объяснить, почему в вашем angular-bootstrap-nav-tree нет API для удаления Branch/Node. По крайней мере, при быстром просмотре источника и проверке вашего теста/примеров такой возможности нет. Это критическое упущение, не так ли? 11.05.2014
  • Требуется выбор нескольких узлов 08.01.2015
  • @NickPerkins Я использовал ваш код в своем проекте, он отлично работает. Но это замедлилось, когда я добавил около 800 записей. Я думаю, это из-за выражения $watch? 05.01.2016

  • 3

    При создании чего-то подобного лучшим решением является рекурсивная директива. Однако, когда вы делаете такую ​​директиву, вы обнаруживаете, что AngularJS попадает в бесконечный цикл.

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

    Я узнал об этом в этой ветке и абстрагировал эту функциональность в службу.

    module.factory('RecursionHelper', ['$compile', function($compile){
        return {
            /**
             * Manually compiles the element, fixing the recursion loop.
             * @param element
             * @param [link] A post-link function, or an object with function(s) registered via pre and post properties.
             * @returns An object containing the linking functions.
             */
            compile: function(element, link){
                // Normalize the link parameter
                if(angular.isFunction(link)){
                    link = { post: link };
                }
    
                // Break the recursion loop by removing the contents
                var contents = element.contents().remove();
                var compiledContents;
                return {
                    pre: (link && link.pre) ? link.pre : null,
                    /**
                     * Compiles and re-adds the contents
                     */
                    post: function(scope, element){
                        // Compile the contents
                        if(!compiledContents){
                            compiledContents = $compile(contents);
                        }
                        // Re-add the compiled contents to the element
                        compiledContents(scope, function(clone){
                            element.append(clone);
                        });
    
                        // Call the post-linking function, if any
                        if(link && link.post){
                            link.post.apply(null, arguments);
                        }
                    }
                };
            }
        };
    }]);
    

    С помощью этого сервиса вы можете легко создать директиву дерева (или другие рекурсивные директивы). Вот пример директивы дерева:

    module.directive("tree", function(RecursionHelper) {
        return {
            restrict: "E",
            scope: {family: '='},
            template: 
                '<p>{{ family.name }}</p>'+
                '<ul>' + 
                    '<li ng-repeat="child in family.children">' + 
                        '<tree family="child"></tree>' +
                    '</li>' +
                '</ul>',
            compile: function(element) {
                return RecursionHelper.compile(element);
            }
        };
    });
    

    См. этот Plunker для демонстрации. Мне нравится это решение больше всего, потому что:

    1. Вам не нужна специальная директива, которая сделает ваш html менее чистым.
    2. Логика рекурсии абстрагируется в службу RecursionHelper, поэтому вы сохраняете свои директивы в чистоте.

    Обновление: добавлена ​​поддержка пользовательских функций связывания.

    28.09.2013
  • это кажется таким аккуратным и мощным, есть идеи, почему это не поведение по умолчанию в angularjs? 26.11.2013
  • Как при такой компиляции добавить в область дополнительные атрибуты? Функция ссылки больше недоступна после компиляции... 07.02.2014
  • @ bkent314 bkent314 Я добавил поддержку для этого. Теперь он принимает связывающие функции точно так же, как их возвращает компиляция. Я также создал проект Github для сервиса. 07.02.2014
  • @MarkLagendijk Очень, очень круто! Вы заслуживаете много голосов за абстрагирование рекурсии из директивы. Все директивы, которые я видел, выглядят безнадежно сложными с примесью этой логики. Есть ли способ заставить ваш RecursionHelper работать с включением? 21.03.2014
  • Я действительно предлагаю вам добавить некоторые данные в решение такого типа - да, почти все реализуют дерево с рекурсивными директивами, это легко. Но это очень медленно, как ng-repeat $digest - как только вы доберетесь до сотен узлов, это не сработает. 04.04.2014
  • наивный вопрос, почему простой jsbin.com/rapovi/8/edit ?html,js,вывод работает? конечно, ваш пример работает jsbin.com/rapovi/10/edit?html,js , вывод 15.10.2015
  • У меня была своя директива дерева, переключатель, который я использовал в течение 3 лет в своих предыдущих проектах. и теперь я обнаружил, что у него есть проблемы! поэтому я взял ваш RecursionHelper, вставил свой шаблон и все работает! Спасибо чувак! 11.12.2015

  • 4

    angular-ui- дерево, кажется, делает хорошую работу для меня

    06.05.2014

    5

    Вот пример использования рекурсивной директивы: http://jsfiddle.net/n8dPm/ Взято из https://groups.google.com/forum/#!topic/angular/vswXTes_FtM

    module.directive("tree", function($compile) {
    return {
        restrict: "E",
        scope: {family: '='},
        template: 
            '<p>{{ family.name }}</p>'+
            '<ul>' + 
                '<li ng-repeat="child in family.children">' + 
                    '<tree family="child"></tree>' +
                '</li>' +
            '</ul>',
        compile: function(tElement, tAttr) {
            var contents = tElement.contents().remove();
            var compiledContents;
            return function(scope, iElement, iAttr) {
                if(!compiledContents) {
                    compiledContents = $compile(contents);
                }
                compiledContents(scope, function(clone, scope) {
                         iElement.append(clone); 
                });
            };
        }
    };
    });
    
    27.05.2013
  • я экспериментировал с этим, и я бы тоже хотел использовать трансклюзию, как вы думаете, это возможно? 16.07.2015

  • 6

    Этот вариант кажется более полным: https://github.com/dump247/angular.tree

    04.03.2013

    7

    Еще один пример, основанный на первоисточнике, с уже готовой древовидной структурой (проще увидеть, как она работает, IMO) и фильтром для поиска по дереву:

    JSFiddle

    23.03.2013

    8

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

    Я хотел создать что-то, что воссоздало бы простоту awnser @Mark Lagendijk, но без определения шаблона в директиве, а скорее позволило бы «пользователю» создать шаблон в HTML...

    С идеями, взятыми из https://github.com/stackfull/angular-tree-repeat. и т. д. В итоге я создал проект: https://github.com/dotJEM/angular-tree

    Что позволяет вам построить свое дерево следующим образом:

    <ul dx-start-with="rootNode">
      <li ng-repeat="node in $dxPrior.nodes">
        {{ node.name }}
        <ul dx-connect="node"/>
      </li>
    </ul>
    

    Что для меня чище, чем необходимость создавать несколько директив для деревьев с разной структурой... По сути, называть вышеприведенное дерево немного ложно, оно гораздо больше отличается от "рекурсивных шаблонов" @ganaraj, но позволяет нам определить шаблон, где нам нужно дерево.

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

    Остался здесь только для другого выбора ...

    09.06.2014
  • ОБНОВЛЕНИЕ: Начиная с версии 1.5 рекурсивные директивы теперь частично поддерживаются в Angular. Это значительно сужает варианты использования dotjem/angular-tree. 09.05.2016

  • 9

    Вы можете попробовать пример Angular-Tree-DnD с Angular-Ui-Tree, но я редактируется, совместимость с таблицей, сеткой, списком.

    • Возможность перетаскивания
    • Директива расширенной функции для списка (next, prev, getChildren,...)
    • Фильтровать данные.
    • Заказ по (версия)
    29.05.2015
  • Спасибо. Мне нужно было Drag & Drop, и это, похоже, единственное решение! 06.01.2016

  • 10

    На основе ответа @ganaraj и ответ, я только что сделал простую "директиву" для древовидной структуры с возможностью выбора, добавления, удаления и редактирования.

    Jsfiddle: http://jsfiddle.net/yoshiokatsuneo/9dzsms7y/

    HTML:

    <script type="text/ng-template" id="tree_item_renderer.html">
        <div class="node"  ng-class="{selected: data.selected}" ng-click="select(data)">
            <span ng-click="data.hide=!data.hide" style="display:inline-block; width:10px;">
                <span ng-show="data.hide && data.nodes.length > 0" class="fa fa-caret-right">+</span>
                <span ng-show="!data.hide && data.nodes.length > 0" class="fa fa-caret-down">-</span>
            </span>
            <span ng-show="!data.editting" ng-dblclick="edit($event)" >{{data.name}}</span>
            <span ng-show="data.editting"><input ng-model="data.name" ng-blur="unedit()" ng-focus="f()"></input></span>
            <button ng-click="add(data)">Add node</button>
            <button ng-click="delete(data)" ng-show="data.parent">Delete node</button>
        </div>
        <ul ng-show="!data.hide" style="list-style-type: none; padding-left: 15px">
            <li ng-repeat="data in data.nodes">
                <recursive><sub-tree data="data"></sub-tree></recursive>
            </li>
        </ul>
    </script>
    <ul ng-app="Application" style="list-style-type: none; padding-left: 0">
        <tree data='{name: "Node", nodes: [],show:true}'></tree>
    </ul>
    

    JavaScript:

    angular.module("myApp",[]);
    
    /* https://stackoverflow.com/a/14657310/1309218 */
    angular.module("myApp").
    directive("recursive", function($compile) {
        return {
            restrict: "EACM",
            require: '^tree',
            priority: 100000,
    
            compile: function(tElement, tAttr) {
                var contents = tElement.contents().remove();
                var compiledContents;
                return function(scope, iElement, iAttr) {
                    if(!compiledContents) {
                        compiledContents = $compile(contents);
                    }
                    compiledContents(scope, 
                                         function(clone) {
                             iElement.append(clone);
                                             });
                };
            }
        };
    });
    
    angular.module("myApp").
    directive("subTree", function($timeout) {
        return {
            restrict: 'EA',
            require: '^tree',
            templateUrl: 'tree_item_renderer.html',
            scope: {
                data: '=',
            },
            link: function(scope, element, attrs, treeCtrl) {
                scope.select = function(){
                    treeCtrl.select(scope.data);
                };
                scope.delete = function() {
                    scope.data.parent.nodes.splice(scope.data.parent.nodes.indexOf(scope.data), 1);
                };
                scope.add = function() {
                    var post = scope.data.nodes.length + 1;
                    var newName = scope.data.name + '-' + post;
                    scope.data.nodes.push({name: newName,nodes: [],show:true, parent: scope.data});
                };
                scope.edit = function(event){
                    scope.data.editting = true;
                    $timeout(function(){event.target.parentNode.querySelector('input').focus();});
                };
                scope.unedit = function(){
                    scope.data.editting = false;
                };
    
            }
        };
    });
    
    
    angular.module("myApp").
    directive("tree", function(){
        return {
            restrict: 'EA',
            template: '<sub-tree data="data" root="data"></sub-tree>',
            controller: function($scope){
                this.select = function(data){
                    if($scope.selected){
                        $scope.selected.selected = false;
                    }
                    data.selected = true;
                    $scope.selected = data;
                };
            },
            scope: {
                data: '=',
            }
        }
    });
    
    30.11.2015

    11

    Да, это определенно возможно. Вопрос здесь, вероятно, предполагает Angular 1.x, но для дальнейшего использования я включаю пример Angular 2:

    Концептуально все, что вам нужно сделать, это создать рекурсивный шаблон:

    <ul>
        <li *for="#dir of directories">
    
            <span><input type="checkbox" [checked]="dir.checked" (click)="dir.check()"    /></span> 
            <span (click)="dir.toggle()">{{ dir.name }}</span>
    
            <div *if="dir.expanded">
                <ul *for="#file of dir.files">
                    {{file}}
                </ul>
                <tree-view [directories]="dir.directories"></tree-view>
            </div>
        </li>
    </ul>
    

    Затем вы привязываете объект дерева к шаблону и позволяете Angular творить чудеса. Эта концепция, очевидно, применима и к Angular 1.x.

    Вот полный пример: http://www.syntaxsuccess.com/viewarticle/recursive-treeview-in-angular-2.0

    30.05.2015

    12

    Для этого вы можете использовать angular-recursion-injector: https://github.com/knyga/angular-recursion-injector

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

    <div class="node">
      <span>{{name}}</span>
    
      <node--recursion recursion-if="subNode" ng-model="subNode"></node--recursion>
    </div>
    

    Одна из вещей, которая позволяет ему работать быстрее и проще, чем другие решения, - это суффикс «--recursion».

    12.06.2015

    13

    Когда древовидная структура большая, Angular (до 1.4.x) становится очень медленным при рендеринге рекурсивного шаблона. Попробовав ряд этих предложений, я создал простую строку HTML и использовал ng-bind-html для ее отображения. Конечно, это не способ использовать функции Angular.

    Здесь показана простейшая рекурсивная функция (с минимальным HTML):

    function menu_tree(menu, prefix) {
        var html = '<div>' + prefix + menu.menu_name + ' - ' + menu.menu_desc + '</div>\n';
        if (!menu.items) return html;
        prefix += menu.menu_name + '/';
        for (var i=0; i<menu.items.length; ++i) {
            var item = menu.items[i];
            html += menu_tree(item, prefix);
        }
        return html;
    }
    // Generate the tree view and tell Angular to trust this HTML
    $scope.html_menu = $sce.trustAsHtml(menu_tree(menu, ''));
    

    В шаблоне нужна только одна строка:

    <div ng-bind-html="html_menu"></div>
    

    Это обходит всю привязку данных Angular и просто отображает HTML за долю времени рекурсивных методов шаблона.

    С такой структурой меню (частичное дерево файлов файловой системы Linux):

    menu = {menu_name: '', menu_desc: 'root', items: [
                {menu_name: 'bin', menu_desc: 'Essential command binaries', items: [
                    {menu_name: 'arch', menu_desc: 'print machine architecture'},
                    {menu_name: 'bash', menu_desc: 'GNU Bourne-Again SHell'},
                    {menu_name: 'cat', menu_desc: 'concatenate and print files'},
                    {menu_name: 'date', menu_desc: 'display or set date and time'},
                    {menu_name: '...', menu_desc: 'other files'}
                ]},
                {menu_name: 'boot', menu_desc: 'Static files of the boot loader'},
                {menu_name: 'dev', menu_desc: 'Device files'},
                {menu_name: 'etc', menu_desc: 'Host-specific system configuration'},
                {menu_name: 'lib', menu_desc: 'Essential shared libraries and kernel modules'},
                {menu_name: 'media', menu_desc: 'Mount point for removable media'},
                {menu_name: 'mnt', menu_desc: 'Mount point for mounting a filesystem temporarily'},
                {menu_name: 'opt', menu_desc: 'Add-on application software packages'},
                {menu_name: 'sbin', menu_desc: 'Essential system binaries'},
                {menu_name: 'srv', menu_desc: 'Data for services provided by this system'},
                {menu_name: 'tmp', menu_desc: 'Temporary files'},
                {menu_name: 'usr', menu_desc: 'Secondary hierarchy', items: [
                    {menu_name: 'bin', menu_desc: 'user utilities and applications'},
                    {menu_name: 'include', menu_desc: ''},
                    {menu_name: 'local', menu_desc: '', items: [
                        {menu_name: 'bin', menu_desc: 'local user binaries'},
                        {menu_name: 'games', menu_desc: 'local user games'}
                    ]},
                    {menu_name: 'sbin', menu_desc: ''},
                    {menu_name: 'share', menu_desc: ''},
                    {menu_name: '...', menu_desc: 'other files'}
                ]},
                {menu_name: 'var', menu_desc: 'Variable data'}
            ]
           }
    

    Вывод становится:

    - root
    /bin - Essential command binaries
    /bin/arch - print machine architecture
    /bin/bash - GNU Bourne-Again SHell
    /bin/cat - concatenate and print files
    /bin/date - display or set date and time
    /bin/... - other files
    /boot - Static files of the boot loader
    /dev - Device files
    /etc - Host-specific system configuration
    /lib - Essential shared libraries and kernel modules
    /media - Mount point for removable media
    /mnt - Mount point for mounting a filesystem temporarily
    /opt - Add-on application software packages
    /sbin - Essential system binaries
    /srv - Data for services provided by this system
    /tmp - Temporary files
    /usr - Secondary hierarchy
    /usr/bin - user utilities and applications
    /usr/include -
    /usr/local -
    /usr/local/bin - local user binaries
    /usr/local/games - local user games
    /usr/sbin -
    /usr/share -
    /usr/... - other files
    /var - Variable data
    
    16.09.2015

    14

    Не сложный.

    <div ng-app="Application" ng-controller="TreeController">
        <table>
            <thead>
                <tr>
                    <th>col 1</th>
                    <th>col 2</th>
                    <th>col 3</th>
                </tr>
            </thead>
            <tbody ng-repeat="item in tree">
                <tr>
                    <td>{{item.id}}</td>
                    <td>{{item.fname}}</td>
                    <td>{{item.lname}}</td>
                </tr>
                <tr ng-repeat="children in item.child">
                    <td style="padding-left:15px;">{{children.id}}</td>
                    <td>{{children.fname}}</td>
                </tr>
            </tbody>
         </table>
    </div>
    

    код контроллера:

    angular.module("myApp", []).
    controller("TreeController", ['$scope', function ($scope) {
        $scope.tree = [{
            id: 1,
            fname: "tree",
            child: [{
                id: 1,
                fname: "example"
            }],
            lname: "grid"
        }];
    
    
    }]);
    
    20.10.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..