Твой подход прекрасен. Альтернативой является использование функции numpy.random.uniform()
:
>>> numpy.random.uniform(-1, 1, size=10)
array([-0.92592953, -0.6045348 , -0.52860837, 0.00321798, 0.16050848,
-0.50421058, 0.06754615, 0.46329675, -0.40952318, 0.49804386])
Что касается вероятности экстремумов: если бы она была идеализирована, то непрерывные случайные числа, вероятность получить один из крайних значений будет 0. Так как числа с плавающей запятой являются дискретизацией непрерывных действительных чисел, то в реальности существует некоторая положительная вероятность получить некоторые из крайностей. Это некоторая форма ошибки дискретизации, и почти наверняка эта ошибка будет искажена другими ошибками в вашей симуляции. Не беспокойтесь!
В худшем случае, где Вы смотрите на неиндексируемое поле, с помощью MIN()
, требует единственной всей передачи таблицы. Используя SORT
и LIMIT
требует filesort. Если бы выполнено против большой таблицы, вероятно, была бы значительная разница в воспринятой производительности. Как бессмысленная точка данных, MIN()
взял.36s, в то время как SORT
и LIMIT
взял.84s против 106 000 таблиц строки на моем dev сервере.
, однако, при рассмотрении индексированного столбца различие более трудно заметить (бессмысленная точка данных составляет 0,00 с в обоих случаях). Рассмотрение вывода объясняет, однако, это похоже MIN()
, в состоянии просто щипнуть самое маленькое значение от индекса ('Избранные таблицы, оптимизированные далеко' и 'ПУСТЫЕ' строки), тогда как SORT
и LIMIT
все еще потребности должны сделать заказанный обход индекса (106 000 строк). Фактическое влияние производительности, вероятно, незначительно.
Это похоже MIN()
, способ пойти - это быстрее в худшем случае, неразличимо в лучшем случае, является стандартным SQL и наиболее ясно выражает значение, которое Вы пытаетесь получить. Единственный случай, где кажется, что использование SORT
и LIMIT
было бы желательно, будет, как [1 112] упомянутый mson, где Вы пишете общую операцию, которая находит вершину или нижнюю часть N значениями из произвольных столбцов, и не стоит выписывать операцию особого случая.
SELECT MIN(`field`)
FROM `tbl`;
Просто, потому что это - совместимый ANSI. Предел 1 является особым к MySql, как TOP к SQL Server.
Я думаю, что ответы зависят от того, что Вы делаете.
, Если у Вас есть 1 от запроса и намерения, так просто, как Вы определили, выберите минуту (поле), предпочтительно.
Однако распространено иметь эти типы изменения требований в - вершину захвата n результаты, энный захват - mth результаты, и т.д.
я не думаю, что это - слишком ужасная идея согласиться на Вашу выбранную базу данных. Изменение dbs не должно быть сделано слегка и иметь для пересмотра, цена, которую Вы платите при создании этого перемещения.
, Почему предел самостоятельно теперь, для боли Вы можете или не можете чувствовать позже?
я действительно думаю, что хорошо остаться ANSI как можно больше, но это - просто инструкция...
Учитывая приемлемую производительность я использовал бы первую, потому что это семантически ближе к намерению.
, Если производительность была проблемой, (Большинство современных оптимизаторов будет probalbly оптимизировать обоих к тому же плану запросов, хотя необходимо протестировать, чтобы проверить, что) тогда, конечно, я использовал бы более быстрый.