Почему массивы 0d в Numpy не рассмотрены скаляром?

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

По этой ссылке вы узнаете, как написать сервис. Хотя это специально для приложения веб-сервера, ту же логику можно применять ко всему.

https://medium.com/@benmorel/creating-a-linux-service-with-systemd-611b5c8b91d6

Затем для запуска программы напишите: [117 ]

sudo systemctl start my_service_name

Чтобы остановить его:

sudo systemctl stop my_service_name

Чтобы просмотреть его результаты:

sudo journalctl -u my_service_name

62
задан Dan Lew 21 April 2009 в 15:05
поделиться

2 ответа

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

Любопытная ситуация со скалярными типами Numpy была подтверждена тем фактом, что не существует изящного и последовательного способа разложения матрицы 1x1 до скалярных типов. Несмотря на то, что математически это одно и то же, они обрабатываются совершенно другим кодом.

Если вы выполняете какое-то количество научного кода, в конечном итоге вы захотите, чтобы такие вещи, как max (a) работать с матрицами любых размеров, даже скалярами. Математически, это вполне разумная вещь, чтобы ожидать. Однако для программистов это означает, что все, что представляет скаляры в Numpy, должно иметь атрибуты .shape и .ndim, так что по крайней мере ufuncs don ' на входе нужно выполнить явную проверку типов для 21 возможного скалярного типа в Numpy.

С другой стороны, они должны также работать с существующими библиотеками Python, которые делает , делают явные проверки типов для скалярного типа. Это дилемма, так как Numpy ndarray должен индивидуально менять свой тип, когда он был преобразован в скаляр, и нет никакого способа узнать, произошло ли это, если он не проверял весь доступ. На самом деле, использование этого маршрута, вероятно, сделало бы немного смехотворно медленной для работы по стандартам скалярного типа.

Решение разработчика Numpy состоит в том, чтобы наследовать от скаляров ndarray и Python для своего собственного скалярного типа, так что все скаляры также имеют .shape,. ndim, .T и т. д. Матрица 1x1 все еще будет присутствовать, но ее использование не рекомендуется, если вы знаете, что будете иметь дело со скаляром. Хотя теоретически это должно работать нормально, иногда вы все равно можете увидеть некоторые места, где они пропустили валик, и уродливые внутренности открыты для всеобщего обозрения:

>>> from numpy import *
>>> a = array(1)
>>> b = int_(1)
>>> a.ndim
0
>>> b.ndim
0
>>> a[...]
array(1)
>>> a[()]
1
>>> b[...]
array(1)
>>> b[()]
1

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

Потенциально более крупная и, возможно, неразрешимая проблема заключается в том, что скаляры Numpy являются неизменяемыми. Поэтому «разбрызгивание» скаляра на ndarray, математически сопряженную операцию свертывания массива в скаляр, является реализацией PITA. На самом деле вы не можете вырастить скаляр Numpy, его нельзя по определению преобразовать в ndarray, даже если newaxis загадочно работает с ним:

>>> b[0,1,2,3] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'numpy.int32' object does not support item assignment
>>> b[newaxis]
array([1])

В Matlab, увеличение размера скаляра - совершенно приемлемая и бездумная операция. В Numpy вы должны использовать jarring a = array (a) везде, где вы думаете, что у вас будет возможность начать со скаляра и закончить массивом. Я понимаю, почему Numpy должен быть таким, чтобы хорошо играть с Python, но это не меняет того факта, что многие новые переключатели глубоко смущены этим. У некоторых есть явная память о борьбе с этим поведением и, в конечном итоге, о настойчивости, в то время как у других, которые слишком далеко ушли, обычно остается какой-то глубокий бесформенный психический шрам, который часто преследует их самые невинные сны. Это ужасная ситуация для всех.

В Numpy вы должны использовать jarring a = array (a) везде, где вы думаете, что у вас будет возможность начать со скаляра и закончить массивом. Я понимаю, почему Numpy должен быть таким, чтобы хорошо играть с Python, но это не меняет того факта, что многие новые переключатели глубоко смущены этим. У некоторых есть явная память о борьбе с этим поведением и, в конечном итоге, о настойчивости, в то время как у других, которые слишком далеко ушли, обычно остается какой-то глубокий бесформенный психический шрам, который часто преследует их самые невинные сны. Это ужасная ситуация для всех.

В Numpy вы должны использовать jarring a = array (a) везде, где вы думаете, что у вас будет возможность начать со скаляра и закончить массивом. Я понимаю, почему Numpy должен быть таким, чтобы хорошо играть с Python, но это не меняет того факта, что многие новые переключатели глубоко смущены этим. У некоторых есть явная память о борьбе с этим поведением и, в конечном итоге, о настойчивости, в то время как у других, которые слишком далеко ушли, обычно остается какой-то глубокий бесформенный психический шрам, который часто преследует их самые невинные сны. Это ужасная ситуация для всех.

Это не меняет того факта, что многие новые коммутаторы глубоко смущены этим. У некоторых есть явная память о борьбе с этим поведением и, в конечном итоге, о настойчивости, в то время как у других, которые слишком далеко ушли, обычно остается какой-то глубокий бесформенный психический шрам, который часто преследует их самые невинные сны. Это ужасная ситуация для всех.

Это не меняет того факта, что многие новые коммутаторы глубоко смущены этим. У некоторых есть явная память о борьбе с этим поведением и, в конечном итоге, о настойчивости, в то время как у других, которые слишком далеко ушли, обычно остается какой-то глубокий бесформенный психический шрам, который часто преследует их самые невинные сны. Это ужасная ситуация для всех.

129
ответ дан 24 November 2019 в 16:42
поделиться

Вы должны создать скалярный массив немного по-другому:

>>> x = numpy.float64(1.111)
>>> x
1.111
>>> numpy.isscalar(x)
True
>>> numpy.ndim(x)
0

Похоже, что скаляры в numpy могут немного отличаться от того, к чему вы привыкли с чисто математической точки зрения. Я полагаю, вы думаете о скалярных матрицах?

6
ответ дан 24 November 2019 в 16:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: