matlab中的计数问题0\x050\x054\x054\x054\x054\x050\x050\x054\x054\x054\x054 1;4\x054\x050\x050\x050\x050\x050\x050\x050\x054\x050\x050 1;4\x054\x050\x050\x050\x050\x050\x050\x050\x054\x050\x050 1;4\x054\x050\x054\x054\x054\x054\x054\x050\x054\x0

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/04 14:16:51
matlab中的计数问题0\x050\x054\x054\x054\x054\x050\x050\x054\x054\x054\x054 1;4\x054\x050\x050\x050\x050\x050\x050\x050\x054\x050\x050 1;4\x054\x050\x050\x050\x050\x050\x050\x050\x054\x050\x050 1;4\x054\x050\x054\x054\x054\x054\x054\x050\x054\x0

matlab中的计数问题0\x050\x054\x054\x054\x054\x050\x050\x054\x054\x054\x054 1;4\x054\x050\x050\x050\x050\x050\x050\x050\x054\x050\x050 1;4\x054\x050\x050\x050\x050\x050\x050\x050\x054\x050\x050 1;4\x054\x050\x054\x054\x054\x054\x054\x050\x054\x0
matlab中的计数问题
0\x050\x054\x054\x054\x054\x050\x050\x054\x054\x054\x054 1;
4\x054\x050\x050\x050\x050\x050\x050\x050\x054\x050\x050 1;
4\x054\x050\x050\x050\x050\x050\x050\x050\x054\x050\x050 1;
4\x054\x050\x054\x054\x054\x054\x054\x050\x054\x050\x050 2;
4\x054\x050\x050\x050\x050\x054\x050\x050\x054\x050\x054 2;
4\x050\x050\x054\x054\x054\x054\x054\x050\x054\x050\x050 2;
4\x050\x050\x050\x050\x050\x054\x050\x050\x054\x050\x050 3 ;
4\x050\x050\x050\x054\x054\x054\x054\x054\x054\x050\x050 3;
4\x050\x050\x050\x054\x054\x054\x054\x054\x054\x050\x050 3;
若月份换到竖行,怎么计数每个月中成交量不是0的个数
我写了一个,
[h,w] = size(K);
P = zeros(max(K(:,w)),w-1);
for month = 1:max(K(:,w))
B = repmat(K(:,w) == month,w,1);
C = (K.*B > 0)';
D = sum(C)';
P(month,:) = D(1:w-1);
end
这个好像不行,不知道错在哪里,请指教

matlab中的计数问题0\x050\x054\x054\x054\x054\x050\x050\x054\x054\x054\x054 1;4\x054\x050\x050\x050\x050\x050\x050\x050\x054\x050\x050 1;4\x054\x050\x050\x050\x050\x050\x050\x050\x054\x050\x050 1;4\x054\x050\x054\x054\x054\x054\x054\x050\x054\x0
抱歉,周末出去玩了没看到.
之前的程序在
C = (A.*B > 0)';
D = sum(C)';
两行之所以要加'是因为matlab中的sum函数默认对列求和,所以先把矩阵转置,求和后再转置回来,相当于对行求了和;而这个问题中本身就是对列求和,所以不用转置操作了:
C = (K.*B > 0);
D = sum(C);
还有就是repmat函数原先是将一行做复制操作变成一个矩阵,写成:
B = repmat(A(h,:) == month,h,1);
而现在是将一列做复制操作,应该写成:
B = repmat(K(:,w) == month,1,w);
就可以了,程序:
clear;
K = [0\x050\x054\x054\x054\x054\x050\x050\x054\x054\x054\x054 1;
4\x054\x050\x050\x050\x050\x050\x050\x050\x054\x050\x050 1;
4\x054\x050\x050\x050\x050\x050\x050\x050\x054\x050\x050 1;
4\x054\x050\x054\x054\x054\x054\x054\x050\x054\x050\x050 2;
4\x054\x050\x050\x050\x050\x054\x050\x050\x054\x050\x054 2;
4\x050\x050\x054\x054\x054\x054\x054\x050\x054\x050\x050 2;
4\x050\x050\x050\x050\x050\x054\x050\x050\x054\x050\x050 3;
4\x050\x050\x050\x054\x054\x054\x054\x054\x054\x050\x050 3;
4\x050\x050\x050\x054\x054\x054\x054\x054\x054\x050\x050 3];
[h,w] = size(K);
P = zeros(max(K(:,w)),w-1);
for month = 1:max(K(:,w))
B = repmat(K(:,w) == month,1,w);
C = (K.*B > 0);
D = sum(C);
P(month,:) = D(1:w-1);
end
P
结果:
P =
2 2 1 1 1 1 0 0 1 3 1 1
3 2 0 2 2 2 3 2 0 3 0 1
3 0 0 0 2 2 3 2 2 3 0 0

你这样做好了,感觉你的写法怪怪的。直接用nonzeros函数查找每个月份的非零元素。
一月份的非零值个数为num=length(nonzeros(k(1:3,1:12)));
一月份的非零值元素为elements=sparse(k(1:3,1:12));
其他月份同理。你好,我的数列月份只是我问问题时随意罗列的,现实中可能是一个1:3000的数列,所以向你上述的办法,要列很...

全部展开

你这样做好了,感觉你的写法怪怪的。直接用nonzeros函数查找每个月份的非零元素。
一月份的非零值个数为num=length(nonzeros(k(1:3,1:12)));
一月份的非零值元素为elements=sparse(k(1:3,1:12));
其他月份同理。

收起