Точно ли numpy воспроизводит все поведение C при обычных операциях?Python

Программы на Python
Ответить Пред. темаСлед. тема
Гость
 Точно ли numpy воспроизводит все поведение C при обычных операциях?

Сообщение Гость »

Я разрабатываю алгоритм на Python и знаю, что позже захочу перевести его на C.
Однако математические операции в Python могут не дать того же результата, что и в C. , например 4294967295 + 1 = 0 в C для целых чисел без знака, но не для простых операций с целыми числами Python. Поэтому мне не следует использовать целые числа Python в своем проекте.
Могу ли я безопасно и легко использовать Numpy для воспроизведения поведения C? То есть, если я выполняю обычные операции (+, -, *, /, %, приведение числа с плавающей запятой к int или наоборот) над массивами типов np.uint32 или np.float64 для Например, гарантированно ли мне (или могу ли я каким-то образом получить эту гарантию) получить тот же результат, что и программа на C с uint32_t и float64_t ?
Я интересует только то, что является частью «официального поведения» C, все, что может зависеть от компилятора или процессора в C, также может отличаться от numpy, как если бы это был другой компилятор/процессор. Я спрашиваю, в частности, потому что у numpy есть Nan, который не всегда есть в C.
EDIT после комментариев:
Я рассматриваю более конкретно этот набор операций: (+, -, *, /, %, приведение числа с плавающей запятой к типу int или наоборот).
У меня есть безуспешно пытался просмотреть документацию numpy и сам провел несколько тестов:
TEST 1: переполнение int32 (

Код: Выделить всё

(uint32_t) 4294967295 + (uint32_t) 1 == 0
в C)[/b]
Похоже, что он не работает с числовыми скалярами

Код: Выделить всё

>>> import numpy
>>> a = numpy.uint32(4294967295)
>>> type(a)

>>> a += 1
>>> a
4294967296
>>> type(a)

Но это касается массивов numpy:

Код: Выделить всё

import numpy
a = numpy.array([4294967295], dtype='uint32')
a += 1
print(a)
print(a.dtype)
Выход:

Код: Выделить всё

[0]
uint32
Но этот конкретный случай не дает мне никакой гарантии, что он всегда работает с массивами.
**ТЕСТ 2: деление отрицательных целых чисел: **

Код: Выделить всё

-1/2 == 0
в C для int32.
Но в «простом» numpy:

Код: Выделить всё

two = np.int64(2)
mone = np.int64(-1)
print(mone / two)
print(mone // two)
Дает:

Код: Выделить всё

-0.5
-1
Мне интересно, есть ли какой-то «переключатель» на numpy или операнды, которые я мог бы использовать, чтобы numpy давал мне, например, 0 в приведенном выше случае

Подробнее здесь: https://stackoverflow.com/questions/781 ... operations
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»