ILNumerics с использованием подмассивов и матфайлов со структурами

Первый вопрос: может ли ILNumerics читать матфайлы со структурой? Я не мог заставить его работать.

Затем я разделил файл в Matlab, и я хотел бы использовать его для расчетов. но у меня проблемы с функцией подмассива. Я хотел бы сделать это:

            using (ILMatFile matRead = new ILMatFile(@"C:\Temp\Dates.mat"))
        {
            ILArray<double> Dates = matRead.GetArray<double>("Dates");
            double x = 736055-1;
            double y = 736237+1;
            ILArray<ILLogical> LogDates = (Dates > x && Dates < y);

        }
        using (ILMatFile matRead = new ILMatFile(@"C:\Temp\Power.mat"))
        {
            ILArray<double> power = matRead.GetArray<double>("Power");
            ILArray<double> tpower = power[LogDates, full];
            double avgpower = tpower.Average();
            Console.WriteLine(avgpower.ToString());
            Console.ReadKey();
        }

Это не работает по ряду причин. Логика не принимает мой синтаксис, и я действительно не понимаю, почему. Но также не работает подмассив во втором блоке, он не знает полного ключевого слова (хотя в документации сказано, что должен, а также ему не нравится логическое. Очевидно, я хочу усреднять tpower по всем столбцам и только по тем строкам, где логическое условие один.

Благодарю. ник


person nik    schedule 09.09.2014    source источник


Ответы (1)


ILLogical - это сам массив. Вы используете это так:

ILLogical LogDates = ILMath.and(Dates > x, Dates < y);

Если у вас по-прежнему возникают проблемы с подмассивом, попробуйте:

ILArray<double> tpower = power[ILMath.find(LogDates), ILMath.full];

Только если ваш класс является производным от ILMath, вы можете опустить идентификатор ILMath.! В противном случае определения строковых подмассивов иногда короче:

ILArray<double> tpower = power[ILMath.find(LogDates), ":"] 

Чтобы взять среднее значение по выбранным строкам, уменьшив его до единицы:

double avgpower = tpower.Average();  // Linq version
double avgpower = (double)ILMath.sumall(tpower) / tpower.S.NumberOfElements;  // prob. faster on large data
person Haymo Kutschbach    schedule 18.09.2014