Страницы

Поиск по вопросам

четверг, 16 мая 2019 г.

Что означает random_state из TSNE?

Ставил 3 разных значений random_state, это: (None, 0, 1).
Так и не понял, в чем заключается суть этого метода. Читал документацию, ответ на сайте, но так и не понял.


Ответ

Суть параметра random_state (во всех функциях и методах из SciKit-Learn) в воспроизводимых случайных значениях. Т.е. если явно задать значение random_state отличным от None - то генерируемые псевдослучайные величины будут иметь одни и те же значения при каждом вызове.
Пример:
In [1]: import numpy as np
In [2]: np.random.seed(31415)
In [3]: np.random.randint(10, size=(5,5)) Out[3]: array([[7, 3, 5, 8, 2], [6, 6, 3, 5, 6], [0, 0, 8, 3, 6], [1, 6, 8, 5, 1], [4, 6, 9, 2, 7]])
In [4]: np.random.seed(31415)
In [5]: np.random.randint(10, size=(5,5)) Out[5]: array([[7, 3, 5, 8, 2], [6, 6, 3, 5, 6], [0, 0, 8, 3, 6], [1, 6, 8, 5, 1], [4, 6, 9, 2, 7]])
In [6]: np.random.seed(31415)
In [7]: np.random.randint(10, size=(5,5)) Out[7]: array([[7, 3, 5, 8, 2], [6, 6, 3, 5, 6], [0, 0, 8, 3, 6], [1, 6, 8, 5, 1], [4, 6, 9, 2, 7]])
PS если вы запустите данный код на вашем компьютере - вы получите те же самые значения в матрицах.
Зачем это нужно?
В задачах машинного обучения и не только часто используется генератор пседослучайных чисел для инициализации различных параметров, весов в нейросетях, случайного разделения дата сета на обучающий и проверочный сеты.
Соответственно если мы хотим сравнить несколько методов или разные наборы параметров, то для честного сравнения надо использовать одинаковые обучающие и проверочные сеты.
Также бывает полезно создать наборы данных случайным, но воспроизводимым способом. Например вы создали несколько различных вычислительных методов и хотите их сравнить или проверить правильность - для этого необходимо использовать одинаковые входные данные.

Настройка отображения элементов в RecyclerView через GridLayoutManager в строке

Необходимо настроить recyclerView таким образом, чтобы расположение элементов в каждой второй строке было по 2, а в нечётных строках по одному item'у.
Как сделать по два элемента во всех строках, т.е. 2 колонки, - это понятно:
GridLayoutManager layoutManager = new GridLayoutManager(this, 2); recyclerView.setLayoutManager(layoutManager);
а вот как сделать чередование - в одной два, а в другой один item? Я подозреваю, что это какой-то метод GridLayoutManager'a, но как и где его применять? В onCreateViewHolder'е?
Спасибо!


Ответ

Попробуй так:
GridLayoutManager layoutManager = new GridLayoutManager(context, 2, GridLayoutManager.VERTICAL, false); layoutManager.setSpanSizeLookup( new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { if((position % 3) == 0){ return 2; } else return 1; } }); recyclerView.setLayoutManager(layoutManager); recyclerView.setAdapter(adapter);

Как сделать, чтобы моя функция set_checkpoints() корректно обрабатывала текстовый файл

У меня есть текстовый файл data.txt
яблоко банан абрикос яблоко апельсин апельсин мандарин абрикос абрикос абрикос абрикос абрикос
Я пытаюсь сделать так, чтобы после обработки файла data.txt функцией set_checkpoints() на выходе получался файл save.txt
//А//яблоко//А// //А//банан//А// //А//абрикос//А// //А//яблоко//А// //А//апельсин//А// //А//апельсин//А// //А//мандарин//А// //А//абрикос//А// //А//абрикос//А// //А//абрикос//А// //А//абрикос//А// //А//абрикос//А//
Но в результате у меня получается вот что:
//А//яблоко//А// //А//банан//А// //А//абрикос//А// яблоко //А//апельсин//А// апельсин //А//мандарин//А// абрикос абрикос абрикос абрикос абрикос
Решение: Нужно сделать так, чтобы функция при нахождении нужного слова из массива, продолжил поиск данного слова до конца файла, а не прерывался на первом же совпадении и переходил бы к следующему слову. В итоге у меня получается, что он находит из массива fruits совпадение со словом из текстового файла, отмечает его чекпойтами и переходит к поиску следующего слова из массива. Как сделать так, чтобы функция работала корректно?
Вот мой код:
import re
path = 'data.txt' # input data save = 'save.txt' # output data
def open_read(path): # функция открывает и считывает файл file = open(path, 'r') content = file.read() file.close() #print(content) return content
Fruits = ['яблоко','банан','абрикос','апельсин','мандарин'] # массив ключевых слов
n=len(Fruits) # определение размера массива Fruits
def set_checkpoints(content): # функция устанавливает checkpoints for i in range(n): find = re.compile(Fruits[i]) res = find.search(content) #lenght = len(find.findall(content)) # определяет общее количество конкретного найденного слова #print (lenght) #for i in range(lenght): if res == None: continue # Если не обнаружено слово else: k1 = res.start() k2 = res.end() content = content[:k1]+"//А//"+content[k1:k2]+"//А//"+content[k2:] print(content) return content ###############################################
content = open_read(path) # окрываем файл content = set_checkpoints(content) # обрабатываем файл функцией set_checkpoints()
file = open(save, 'w') # сохраняем файл file.write(content) file.close()
P.S. Я так понимаю тут дело заключается в методе search(), т.к. метод search() ищет по всей строке, но возвращает только первое найденное совпадение. Тут похоже нужно использовать метод findall(), т.к. этот метод возвращает список всех найденных совпадений. Но я не знаю, как в findall() реализовать установку чекпоинтов. Свойства start() и end() работают только в методе search().
Помогите, пожалуйста.


Ответ

Не нужны тут регулярные выражения:
fruits = ['яблоко', 'банан', 'абрикос', 'апельсин', 'мандарин']
with open('input.txt', encoding='utf-8') as f_in: with open('output.txt', 'w', encoding='utf-8') as f_out: for line in f_in: # Для удаления справа пустых символов: ' ', '
', '
', и т.п. line = line.rstrip()
# Если фрукт есть в списке if line in fruits: f_out.write('//А//{}//А//
'.format(line))

Если работать с текстом и через функцию:
FRUITS = ['яблоко', 'банан', 'абрикос', 'апельсин', 'мандарин']
def set_checkpoints(text: str) -> str: # В одну строку return '
'.join( '//А//{}//А//'.format(line) for line in text.splitlines() if line in FRUITS )
# NOTE: тот же код, что выше # new_lines = [] # # for line in text.splitlines(): # if line in FRUITS: # new_lines.append('//А//{}//А//'.format(line)) # # return '
'.join(new_lines)
with open('input.txt', encoding='utf-8') as f: content = f.read()
# Обрабатываем файл функцией set_checkpoints() content = set_checkpoints(content)
with open('output.txt', 'w', encoding='utf-8') as f: f.write(content)
Результат (output.txt):
//А//яблоко//А// //А//банан//А// //А//абрикос//А// //А//яблоко//А// //А//апельсин//А// //А//апельсин//А// //А//мандарин//А// //А//абрикос//А// //А//абрикос//А// //А//абрикос//А// //А//абрикос//А// //А//абрикос//А//

Поддерживает ли Wi-Fi адаптер TP-LINK TL-WN722N, режим монитора? [закрыт]

Поддерживает ли адаптер TP-LINK TL-WN722N режим монитора?


Ответ

tl-wn722n основан на rt2800us и изначально не предполагает режим мониторинга. Однако работать будет, если всё сделать по инструкции
Качаем с гитхаба новый драйвер, благодаря которому и будет работать monitor mode.
git clone https://github.com/mfruba/kernel.git Заходим в kernel/drivers/TL-WN722N_v2.0-Ralink/ Распаковываем обычный драйвер который находится в архиве rtl8188eu.tar.gz и устанавливаем его.
tar -xvzf archive.tar.gz cd lwfinger-rtl8188eu-00b5f0d make all make install
Убедитесь в том, что драйвер установился в /lib/firmware/rtlwifi/ Далее переходим в директорию с новым драйвером и устанавливаем его
make make install Устанавливаем зависимые модули
modprobe lib80211 modprobe cfg80211 Добавляем модуль в ядро
insmod 8188eu.ko Перезапускаем ОС
shutdown -r now С помощью ifconfig определяем имя интерфейса И включаем monitor mode
ifconfig [имя интерфейса] down iwconfig [имя интерфейса] mode monitor ifconfig [имя интерфейса] up

Проверка переменной на валидность PHP

Есть динамическая переменная $password в которой храниться генерируемый пароль допустим:
$password="BLKoAyZ9"; function testPassword() { $test=null; $test=//проверка $password на валидность return $test // нужно чтобы возвращала true или false };
Требования к паролю: Миниму 6 букв Минимум 2 цифры Минимум 1 спецсимвол. т.е - (!@#$%^&&*_+) можно ли реализовать проверку чтобы функция возвращала true или false?


Ответ

Имеем две строки для теста:
$password_1 = 's3xbl4y@t'; $password_2 = 'test$';
И следующую функцию:
function check_password ($pass) { if (strlen($pass) >= 9) { $number = preg_match_all('/[0-9]/', $pass); $letter = preg_match_all('/[A-Za-z]/', $pass); $symbol = preg_match_all('/[!@#$%^&*_+]/', $pass);
if ($letter >= 6 && $symbol >= 1 && $number >= 2) { return true; } else return false; } else return false; }
Делаем дамп для проверки функции:
var_dump(check_password($password_1), check_password($password_2));
На выходе мы получаем:
bool(true) bool(false)

Как реализовать UI как в Scratch

Сегодня в Google Play наткнулся на интересную программу, конструктор, в котором были реализованы кубики (не знаю как они называются) как на картинке.

Вот мне стало интересно, а как такие вещи реализовывать?


Ответ

Концепция. Каждое действие (цикл, условие, арифметика) - это отдельный класс, унаследованный от родительского класса ParentAction. У каждого класса есть своя реализация. Для каждого блока - у вас переопределен метод исполнения. Параметры передаются в конструктор класса.
abstrast class ParentAction() { abstract fun execute(child: ParentAction) }
Разберем простой пример: вывести в цикле 5 раз некоторую строчку. В UI части - пользователь собирает два блока, один вложенный в другой. Проходя его дерево блоков изнутри-наружу, мы собираем верную цепочку, последовательность исполнения блоков. В данном примере класс Printf - минимальное действие. Им нельзя ничего обернуть. Смотрите классы ниже:
сlass Foreach(private val count: Int, child: ParentAction): ParentAction { override fun execute() { for(i : 0..count) { child.execute() } } }
Класс Printf:
сlass Printf(private val str: String): ParentAction { override fun execute() { print(str) } }
Тогда, при обратном прохождении дерева пользователя, мы получаем:
Генерируем объект класса Printf с указанными пользователем параметрами Генерируем объект класса Foreach и передаем ему на вход класс Printf, дабы тот, запускал его внутри себя. Запускаем метод execute у класса Foreach.
Все. Шарманка закрутилась. Для реализации математики, вам придется организовать работу с "памятью", дабы разные классы могли последовательно читать из общего источника. В итоге, у вас получается простой компилятор, "надстройка". Конечно, все зависит от вашей задачи. Если вы хотите создать программу для обучения детей основам программирования, то данная реализация уместна. Если же вы хотите разработать графический язык программирования, то вам следует углубиться в разработку собственного компилятора, т.к. данная надстройка не будет отличать высокой эффективностью. Удачи!

Как изменить формат даты при запросе в mysql

Как изменить формат даты при запросе в MySQL, в базу записываю дату через NOW() и она имеет формат YYYY-MM-DD HH-MM-SS, мне нужно, чтобы при получении записи дата была формата d:m:Y H:i. Для этого делаю запрос, используя
DATE_FORMAT(): SELECT * DATE_FORMAT(date, '%d/%m/%Y %H:%i') FROM comm.
Но дата все равно идет в виде YYYY-MM-DD HH-MM-SS. В чем ошибка?


Ответ

Тип поля какой? Должен быть DateTime, а так ваша функция прекрасно работает:
SELECT DATE_FORMAT('2018-07-25 18:01:02', '%d/%m/%Y %H:%i')
Результат:
24/07/2018 05:03