Как извлечь столбцы данных из .txt файлов MATLAB

#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]) для вычислений с ограниченным диапазоном