#matlab
#matlab
Вопрос:
У меня есть некоторые данные в файле .txt. которые разделяются запятыми.
например:
1.4,2,3,4,5
2,3,4.2,5,6
24,5,2,33.4,62
что делать, если вам нужно среднее значение столбцов, например, первого столбца (1.4, 2 и 24)? или второй столбец (2,3 и 5)?
Я думаю, что помещение столбца в массив и использование встроенной функции mean будет работать, но пока я могу извлекать только строки, а не столбцы
вместо того, чтобы создавать еще один поток, я подумал, что отредактирую этот. Я работаю над получением среднего значения для каждого столбца хорошо известного набора данных iris. Я вырезал небольшую часть данных:
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
delimiterln= ',';
data = importdata('iris.txt', delimiterln);
meanCol1 = mean(data(:,1))
meanCol2 = mean(data(:,2))
meanCol3 = mean(data(:,3))
meanCol4 = mean(data(:,4))
Неопределенная функция ‘sum’ для входных аргументов типа ‘cell’.
Ошибка в среднем (строка 115) y = сумма (x, dim, флаг) / размер (x, dim);
Ошибка в irisData(строка 6) meanCol1 = mean(данные(:,1))
похоже, что произошла ошибка при обработке типа данных … есть мысли по этому поводу? Я попытался избавиться от последнего столбца, который является строками. и, похоже, это работает без ошибок. Поэтому я думаю, что это из-за строк.
Ответ №1:
Используйте функцию чтения файлов, разделенных запятыми:
M = csvread(filename);
Теперь у вас есть матрица M:
col1Mean=mean(M(:,1));
Комментарии:
1. С Matlab стоит как можно раньше и чаще использовать мышление «векторизации»:
mean(M, 1)
вы получаете среднее значение всех столбцов сразу.2. является ли csvread только для чисел? что делать, если есть дополнительный столбец строк? есть ли способ исключить только этот столбец?
3. хорошо, я думаю, что знаю, как сделать диапазон строк, так что это будет похоже
4. на самом деле я нашел: M = csvread(filename, R1, C1) и M = csvread(filename, R1, C1,[R1 C1 R2 C2]) для вычислений с ограниченным диапазоном