我想比较以下给定的数据集
a = '235 148 89 19 222';
b = '112 128 144 160 176';
c = '192 192 192 192 192';
d = '64 64 64 64 64';
带
y = [230 138 79 15 212];
然后通过将给定数据集中的每一个与y
进行比较来计算相关系数。然后,显示找到的具有最高相关系数的字符串。
我可以通过命令
c = corrcoef( a, y );
c = abs(c(2,1));
但如何使用for循环遍历每个数据集并显示最高corrcoef
的结果?
以下是我编写的代码段,但我不知道如何继续使用' for循环'
a = '235 148 89 19 222';
b = '112 128 144 160 176';
c = '192 192 192 192 192';
d = '64 64 64 64 64';
y = '230 138 79 15 212';
s = {a;b;c;d};
s = cellfun(@strsplit, s, 'UniformOutput', false);
s = vertcat(s{:});
for i = 1:size(s,1)
end
答案 0 :(得分:0)
是否有使用字符串和单元格而不是整数值和矩阵的特殊原因?
以下解决方案如何:
a = [235 148 89 19 222;...
112 128 144 160 176;...
192 192 192 192 192;...
64 64 64 64 64];
b = zeros(size(a));
y = [230 138 79 15 212];
for i=1:length(a(:,1))
b(i,:) = a(i,:)- y;
end;
[~, minLine] = min(sum(abs(b')));
disp(minLine);
通过计算差异并将值存储在第二个矩阵a
中,将给定数据集y
(矩阵)中的每一行与给定向量b
进行比较。
在循环之后,计算最小总和并为您提供a
中的行,该行与y
答案 1 :(得分:0)
首先,将数字字符串转换为数组的简单方法是使用 str2num是这样的:
>> an = str2num(a)
an =
235 148 89 19 222
在矩阵中连接stings,因为行使用char然后将其转换为矩阵:
>> S = char(a,b,c,d)
S =
235 148 89 19 222
112 128 144 160 176
192 192 192 192 192
64 64 64 64 64
>> N = str2num(S)
N =
235 148 89 19 222
112 128 144 160 176
192 192 192 192 192
64 64 64 64 64
那么你唯一需要的就是去制作矩阵:
>> [rows,columns] = size(N)
rows =
4
columns =
5
我们需要迭代所有行
>> N(1,:)
ans =
235 148 89 19 222
在matlab帮助中:
R = corrcoef(A,B) returns coefficients between two random variables A and B.
>> R = corrcoef(N(1,:),y)
R =
1.0000 0.9995
0.9995 1.0000
然后将您的度量应用于循环
>> for i = 1:rows
R = corrcoef(N(i,:),y);
rr(i) = abs(R(2,1));
end
>> rr
rr =
0.9995 0.2789 NaN NaN
最后,该向量的最大值是您想要的行
>> [value,position] = max(rr)
value =
0.9995
position =
1
>> N
N =
235 148 89 19 222
112 128 144 160 176
192 192 192 192 192
64 64 64 64 64
>> N(position,:)
ans =
235 148 89 19 222