У меня есть код Python, в котором я использую numpy для выполнения некоторых вычислений. В моем коде у меня есть некоторая целочисленная переменная «N», которую я использую в качестве индекса.
Затем я использую scipy.io.savemat для использования этого индекса в моем коде Matlab (2017a), и я получаю эту ошибку, когда делаю что-то подобное:
% N is the int variable I have from my python code
>> N
N =
int64
1792
>> (1:2)/N
Error using /
Integers can only be combined with integers of the same class, or scalar doubles.
По-видимому, «собственные целые числа» Matlab относятся к классу «двойной». Под чем я подразумеваю:
>> N=3
N =
3
>> class(N)
ans =
'double'
Если бы я назначил «N» в своем коде Matlab, у меня не было бы проблем с выполнением вышеуказанного кода. Но я назначаю свои переменные в python, а затем конвертирую их в Matlab. Попытка использовать numpy.double для 'N' в моем коде python приводит к предупреждениям numpy, например:
>>> N = numpy.double(100)
>>> numpy.zeros(N)
VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
Подводя итог, я хочу использовать «N» как целое число в моем коде Python, а затем как двойное число (или что-то еще, что работает как собственное целое число Matlab) в моем коде Matlab. Я думал, что savemat сделает это преобразование за меня, но, вероятно, по другим веским причинам это не так.
Очевидным решением было бы преобразовать целое число в двойное до или после сериализации. Но так как у меня есть огромный словарь с множеством разных переменных, это потребует отслеживания типов каждой из них, чего я бы очень хотел избежать. Я ищу простое более «родное» решение.
Как бы вы предложили решить этот вопрос? Спасибо
np.double(100)
создает поплавок. Поэтомуnp.zeros
не любит - использует, но предупреждает. Как насчет того, чтобы сохранить целое числоN
в Python, но сохранить его какfloat(N)
в файл. У меня Octave, а не MATLAB, поэтому, возможно, я не смогу проверить это для вас. - person hpaulj   schedule 25.04.2017