Задать вопрос
  • Что можно делать с двумя MacBook'ами объединенными одним USB-C?

    Можно один из них подключить как внешний диск другого. См. target disk mode.

    Тот, что будет «диском» включать с нажатой клавишей T.
    Ответ написан
    3 комментария
  • Как прочитать файл MNIST в php?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    По вашей же ссылке, ниже, идёт описание формата файлов:
    [offset] [type]          [value]          [description]
    0000     32 bit integer  0x00000803(2051) magic number
    0004     32 bit integer  60000            number of images
    0008     32 bit integer  28               number of rows
    0012     32 bit integer  28               number of columns
    0016     unsigned byte   ??               pixel
    0017     unsigned byte   ??               pixel
    ........
    xxxx     unsigned byte   ??               pixel


    Pixels are organized row-wise. Pixel values are 0 to 255. 0 means background (white), 255 means foreground (black).


    Т.е. грубо говоря, можно проигнорировать заголовок, отмотать сразу на 16-й байт и прочитать 784 байта первой картинки. Каждый байт это яркость очередного серого (одноканального) пикселя: 0 белый, 255 черный.

    В PHP
    • открыть файл fopen() как бинарный ('b' нужно только в Windows): $fh = fopen('train-images-idx3-ubyte', 'rb');
    • отмотать fseek() на 16-й байт:
      fseek( $fh, 16);
    • Прочитать fread() 784 байта: $byteString = fread($fh, 784);


    Дальше можете работать со строкой или распаковать unpack() байты:
    $arr = unpack( 'C*', $byteString);
    $arr[28] // яркость первого пикселя во второй строке


    P.S. но с оптимизмом глядя в будущее, я бы порекомендовал заморочиться и освоить Python, т.к. для него на порядки больше библиотек, уроков и людей в теме машинного обучения.
    Ответ написан
    3 комментария
  • Есть ли универсальное решение для хранения обработанной записи?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Подозревая некоторый бардак в таблицах с оправданием «так исторически сложилось», предложу жесть — одна новая таблица Отправленные:
    id, имя_таблицы, id_записи_в_той_таблице

    </sarcasm>
    Ответ написан
    Комментировать
  • Опция rate - c чем ее едят?

    Почитайте про то как работает градиентный спуск.

    В процессе обучения вы минимизируете функцию потерь, ищете её дно:
    5a0996fd6edab464657581.png

    «Скорость обучения» == «величина шага». Если слишком большие шаги, есть риск проскочить свою остановку. Если слишком маленькие – придёте, но пешком быстрее. : )

    На иллюстрации приведена ещё более оптимальная стратегия, когда величина шага изменяется с каждой итерацией от большого к меньшему.
    Ответ написан
    Комментировать
  • Как связать Google Таблицы и Контакты?

    Ответ:
    написать и подключить скрипт
    Google Apps Script хорошо документрирован. У вас всё получится.

    • В таблице открыть Tools - Script Editor.
    • Написать функцию, которая будет запускаться при появлении новой записи из формы. Есть пример.
    • Посмотреть API Контактов.
    • ?????
    • Profit!


    p.s. не забыть от имени владельца документа создать Installable Trigger на событие Form submit – эту написанную выше функцию – чтобы она вызывалась всякий раз, как заполняется форма.
    Ответ написан
  • Как выполнить проверку всех возможных вариантов?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Кажется, вам подойдёт такой простой алгоритм: перебрать все числа в двоичной записи от 1 до 2n, и брать те элементы строки, которым соответствует 1.

    Набросал функцию, подбирающую из данных элементов комбинацию, дающую наиболее близкую сумму к заданной:
    function nearest(arr, total) {
      var len = arr.length
        , i
        , bit
        , sum
        , n = Math.pow(2, len)
        , currDist
        , index = undefined
        , dist = undefined
        , result = []
      ;
      
      for( i = 1; i < n; i++) {
        sum = 0;
        for( bit = 0; bit < len; bit++) {
          if( i & (1 << bit)) sum += arr[bit];
        }
        
        currDist = Math.abs(total - sum);
        if( typeof dist === 'undefined' || dist > currDist) {
          index = i;
          dist = currDist;
          if( dist === 0) break;
        }
      }
      
      for(bit = 0; bit < len; bit++) {
        if( index & (1 << bit)) result.push(arr[bit]);
      }
      
      return result;  
    }
    
    nearest([1,3,4,6,8], 12) // [1,3,8]
    nearest([1,2,4,6,8], 12) // [2,4,6]
    nearest([7,9,13,19,28], 12) // [13] dist = 1
    nearest([7,9,13,19,28], 28) // [9,19] не [28] т.к. останавливается на первом найденном варианте
    Ответ написан
    Комментировать
  • Что быстрее и лучше map() или foreach() или for() в javascript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Зачем гадать, если можно измерить. Например.
    Ответ написан
    Комментировать
  • Как работать с состояниями в приложений JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Один из вариантов хранить их как битовую карту – одно целое число, где определённый бит что-то значит. В вашем случае первые 5 битов, например, отражают состояние чекбоксов:
    0000 0010
       │ │││┕╼ бит 0, чекбокс 0
       │ ││└── бит 1, чекбокс 1
       │ │└─── бит 2, чекбокс 2
       │ └──── бит 3, чекбокс 3
       └────── бит 4, чекбокс 4


    Так вы сможете чуть быстрее писать условия, напр.
    switch( bitmap) {
      case 0: // все выключены
        // загрузить что-то там
        break;
      case 1<<3: // включен только 3-й бит
        // загрузить что-то для 3-го чекбокса
        break;
      case 28: // вкл. 3, 4 и 5-й
      // ...
    }
    Ответ написан
    2 комментария
  • Какие различия программирования под UNIX и Linux?

    Сможете.

    Различия UNIX и Linux (на англ.)

    Linux is a Unix clone written from scratch by Linus Torvalds with assistance from a loosely-knit team of hackers across the Net. It aims towards POSIX compliance.
    Ответ написан
    Комментировать
  • Функция сортировки массива в js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    в документации на MDN неплохо описано назначение сортировочной функции:
    Если функция сравнения compareFunction предоставлена, элементы массива сортируются в соответствии с её возвращаемым значением. Если сравниваются два элемента a и b, то:

    Если compareFunction(a, b) меньше 0, сортировка поставит a по меньшему индексу, чем b, то есть, a идёт первым.

    Если compareFunction(a, b) вернёт 0, сортировка оставит a и b неизменными по отношению друг к другу, но отсортирует их по отношению ко всем другим элементам. Обратите внимание: стандарт ECMAscript не гарантирует данное поведение, и ему следуют не все браузеры (например, версии Mozilla по крайней мере, до 2003 года).

    Если compareFunction(a, b) больше 0, сортировка поставит b по меньшему индексу, чем a.

    Функция compareFunction(a, b) должна всегда возвращать одинаковое значение для определённой пары элементов a и b. Если будут возвращаться непоследовательные результаты, порядок сортировки будет не определён.
    Ответ написан
    Комментировать
  • Как сконвертировать плоский массив в дерево?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. Найти корневой элемент – в вашем случае это с наименьшим id
    2. Далее рекурсивно вызывать функцию, которая получая на вход элемент дописывает ему детей по их id.


    Чтобы быстрее по id находить весь элемент, данные в начале преобразовываются в «словарь» – объект, где свойства это id, а значения элементы.

    var data = [
    {id: 0, name: 'Main', path: '/', childs: [1,2]},
    {id: 1, name: 'One', path: '/one', childs: [3]},
    {id: 2, name: 'Two', path: '/two', childs: []},
    {id: 3, name: 'Three', path: '/one/three', childs: []}
    ];
    
    function makeTree(d) {
      var id, el, i, dict = {}, minId, r;
      
      function parseChildren(el) {
        var i, newEl;
        for( i = 0; i < el.childs.length; i++) {
          newEl = makeElement(dict[ el.childs[i] ]);
          parseChildren( newEl);
          el.children.push( newEl);
        }
        delete el.childs;
      }
      
      for( i = 0; i < d.length; i++) {
        el = d[i];
        id = el.id;
        if( typeof minId === 'undefined' || minId > id) minId = id;
        dict[id] = el;
      }
    
      r = makeElement( dict[minId] ); // root element
      parseChildren(r);
      return r;
    }
    
    function makeElement(arrElement) {
      return {
        name: arrElement.name,
        path: arrElement.path,
        childs: arrElement.childs,
        children: []
      };
    }
    
    var tree = makeTree(data);
    /* {
    	"name": "Main",
    	"path": "/",
    	"children": [{
    		"name": "One",
    		"path": "/one",
    		"children": [{
    			"name": "Three",
    			"path": "/one/three",
    			"children": []
    		}]
    	}, {
    		"name": "Two",
    		"path": "/two",
    		"children": []
    	}]
    } */
    Ответ написан
    Комментировать
  • Как мне добавить к 001 единицу и чтобы стало 002?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. найти позицию, с которой начинаются цифры в конце
    2. запомнить длину числа
    3. увеличить на 1 и перевести в строку
    4. при необходимости дописать нулей
    5. склеить с частью до числа
    function stringInc(s) {
      var pos = s.length - 1;
      while(pos >= 0) {
        if( Math.abs(s.charCodeAt(pos) - 52.5) < 5) pos--;
        else break;
      }
      if( ++pos >= s.length) return s; // no number
      var numLength = s.length - pos;
      var numString = (parseInt(s.substr(pos)) + 1).toString();
      if( numString.length < numLength) {
        numString = ((Array(1 + numLength).join('0')) + numString).substr(-numLength);
      }
      
      return s.substr(0,pos) + numString;
    }
    
    stringInc('abc123') // abc124
    stringInc('abc999') // abc1000
    stringInc('abc00009') // abc00010
    stringInc('009') // 010
    stringInc('9') // 10
    stringInc('aaa') // aaa
    Ответ написан
    Комментировать
  • Как правильно распарсить массив?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Создать объект со свойством areas:
    var result = { "areas": "значение для areas"}

    Взять массив из свойства "mh" исходных данных. Это запись в JSON поэтому просто пишем
    peremennaya = {...тут весь этот JSON...}
    peremennaya.mh // тут нужный массив


    Из этого массива нужно сделать новый, где каждый элемент будет содержать только два свойства: id и title. Первое берется из оригинала как есть, а второе нужно составить, собрав значения свойств элемента title и count через пробел-дефис-пробел:
    '' + el.title + ' - ' + el.count

    Когда нужно над каждым элементом массива произвести какое действие, удобен метод массивов map(). В него передаётся функция, которая, получая на вход очередное значение из массива, что-то с ним делает и возвращает новое значение.

    Итого:
    var d = {"mh": [{"id": "BR", "count": 18516, "title": "Brazil"}, 
        {"id": "US", "count": 4514, "title": "United States"}, 
        {"id": "MY", "count": 390, "title": "Malaysia"}, 
        {"id": "IT", "count": 208, "title": "Italy"}]
    };
    
    var result = {areas: d.mh.map(el => ({id:el.id, title:''+el.title+' - '+el.count}))}
    
    // {"areas":[{"id":"BR","title":"Brazil - 18516"},{"id":"US","title":"United States - 4514"},
    //   {"id":"MY","title":"Malaysia - 390"},{"id":"IT","title":"Italy - 208"}]}
    Ответ написан
    Комментировать
  • Как деактивировать ключ вк сообщества через этот же самый ключ?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    Такие методы API отсутствуют.

    Попробуйте задать вопрос в тех. поддержку ВК по API.
    Если отыщите решение, поделитесь, пожалуйста, в этом же вопросе.
    Ответ написан
    Комментировать
  • Как правильно посчитать площадь прямоугольника?

    Недоделили. 1 квадратный метр это 1000*1000мм.
    Полученные миллиметры надо делить на миллион.
    Ответ написан
    Комментировать
  • Как быстро научиться читать «с листа» математические формулы?

    sergiks
    @sergiks Автор вопроса
    ♬♬
    Нашёл отличную шпаргалку, которая решает все мои вопросы: приложение к книге Sebastian Raschka «Introduction to Artificial Neural Networks and Deep Learning: A Practical Guide with Applications in Python»

    sebastianraschka.com...appendix_a_math_notation.pdf

    Ноутбуки книги на github: rasbt/deep-learning-book
    Ответ написан
    Комментировать
  • С чего нужно начать изучать программирование нейронных сетей?

    всерьёз и надолго – это выбрать и пройти программу обучения.

    Как вариант, Школа Анализа Данных Яндекса. Посмотрите вступительные задания (напр. 2016 года)

    На английском языке выбор шире – на Coursera, Udacity есть программы по ML.
    Ответ написан
    Комментировать
  • Чем реально полезным можно заняться школьнику знающему программирование?

    «Заявить о себе» можно на крупных публичных площадках:
    1. github – помочь существующему проекту или запилить новый, свой, невероятно полезный многим;
    2. kaggle – разобраться с машинным обучением и научиться точнее всех прогнозировать;
    3. олимпиады.
    Warning обратная сторона медали: в результате попытки заявить о себе может случиться так, что станет очевидным, как много кругом крутых перцев и как до них бесконечно далеко, что угрожает самооценке.
    Ответ написан
    Комментировать
  • Как избавится от знака? , в запросе?

    sergiks
    @sergiks Куратор тега PHP
    ♬♬
    Решается настройкой веб-сервера. Это он должен при отсутствии папки или файла с запрошенным названием «переписывать» запрос и передавать в index.php уже GET-параметрами или иначе запрошенный адрес.

    У вас Nginx или Apache? Такой паттерн называется «front controller».

    Nginx:
    try_files $uri $uri/ /index.php?q=$uri&$args;
    или ещё проще, читайте запрошенную строку из переменной $_SERVER['REQUEST_URI'] и напишите просто try_files $uri $uri/ /index.php;

    Apache:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ /index.php?$1 [QSA,L]
    Ответ написан
    1 комментарий
  • Как выбрать из текста 3 слова одинаковой или похожей (максимально приближенной) длины?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Собрать из текста словарь "длина": [слово,слово]
    Выбирать слова нужной длины, а при отсутствии смотреть соседние по значению ключи.

    words = txt.replace(/[\.,\?\!\:;\–\(\)]/g, '').toLowerCase().split(/\s+/);
    
    // make dictionary
    var db = [];
    for( var i = 0; i < words.length; i++) {
      word = words[i];
      len = word.length;
      if(db.length <= len || typeof db[len] == 'undefined') db[len] = [];
      if(!~db[len].indexOf(word)) db[len].push(word);
    }
    
    function getWords(db, length, n) {
      n = n || 3;
      var result = [], offset = 0, m;
      length = Math.max(0, Math.min(length, db.length));
      while( result.length < n) {
    
        m = n - result.length;
        if( db[length + offset]) {
          result = result.concat( getUpTo(m, db[length + offset]))
        }
    
        m = n - result.length;
        if( offset &&  m  &&  db[length - offset]) {
          result = result.concat( getUpTo(m, db[length - offset]))
        }
        
        m = n - result.length;
        if( m === 0) break;
        offset++;
        if( offset + length > db.length && offset > length) break;
      }
      
      return result;
    }
    
    function getUpTo(n, arr) {
      return arr.slice(0, Math.min(n, arr.length));
    }


    Fiddle
    Ответ написан
    1 комментарий