Существует ли способ уменьшить scipy/numpy точность для сокращения потребления памяти?

создать таблицу # temp1 (A int, B int)

вставить в # temp1 (a, b) значения (1001,1234), (1002,2235), (1003,2235), (1004 , 2235), (1005,2235), (1006,2235), (1007,3234), (1008,3234), (1009,3234), (1010,3234), (1011,3234), (1012,3234) ), (1013,3234), (1014,3234)

выберите *, row_number () over (разделите на порядок b на b asc) из # temp1

7
задан timday 7 March 2009 в 18:20
поделиться

2 ответа

Не похоже, что существует любая функция, чтобы сделать это в функциях fft scipy (см. http://www.astro.rug.nl/efidad/scipy.fftpack.basic.html).

Если Вы не можете найти библиотеку FFT фиксированной точки для Python, маловероятно, что функция, которую Вы хотите, существует, так как Ваш формат плавающей точки собственного оборудования составляет 128 битов. Действительно похоже, что Вы могли использовать rfft метод для получения просто компонентов с реальным знаком (никакая фаза) FFT, и это сохранит половину RAM.

Я выполнил следующее в интерактивном Python:

>>> from numpy import *
>>>  v = array(10000*random.random([512,512,512]),dtype=int16)
>>> shape(v)
(512, 512, 512)
>>> type(v[0,0,0])
<type 'numpy.int16'>

В этой точке RSS (Размер Резидентного набора) Python составлял 265 МБ.

f = fft.fft(v)

И в этой точке RSS Python 2.3 ГБ.

>>> type(f)
<type 'numpy.ndarray'>
>>> type(f[0,0,0]) 
<type 'numpy.complex128'>
>>> v = []

И в этой точке RSS снижается до 2.0 ГБ, так как у меня есть free'd против.

Используя "fft.rfft (v)" для вычислений действительных значений только приводит к RSS на 1.3 ГБ. (почти половина, как ожидалось)

Выполнение:

>>> f = complex64(fft.fft(v))

Хуже из обоих миров, так как это сначала вычисляет complex128 версию (2.3GB) и затем копирует это в complex64 версию (1.3GB), что означает пик, RSS на моей машине составлял 3.6 ГБ, и затем это успокоилось к 1.3 ГБ снова.

Я думаю, что, если у Вас есть 4 ГБ RAM, это должно все работать просто великолепно (как она делает для меня). Какова проблема?

5
ответ дан 7 December 2019 в 03:21
поделиться

Scipy 0.8 будет иметь поддержку одинарной точности почти всего кода fft (Код уже находится в соединительной линии, таким образом, можно установить scipy от svn при необходимости в функции теперь).

4
ответ дан 7 December 2019 в 03:21
поделиться
Другие вопросы по тегам:

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