problem having reading the IP address in sorting

7 次查看(过去 30 天)
i asked a question here and sir andrei bobrov came out with a good solution here http://www.mathworks.in/matlabcentral/answers/34805-sorting-and-counting
a = [ 1 2 5 7] ; b = [ 9 9 3 4] ;
[aa bb] = ndgrid(a,b);
k = [aa(:) bb(:)];
[n1, n2, n2] = unique(k,'rows');
n3 = histc(n2,1:max(n2));
out = [n1, n3]
but what i ask is if i have to input a cell with values as
['172.20.1.1' '172.20.0.31' '172.20.114.29']
and perform the same program i am getting error as
??? Undefined function or method 'full' for input arguments of type 'cell'.
Error in ==> ndgrid at 38
varargin{i} = full(varargin{i}); % Make sure everything is full
Error in ==> bob at 3
[aa bb] = ndgrid(a,b);
any solutions please ??

采纳的回答

Andrei Bobrov
Andrei Bobrov 2012-4-18
a = { '172.20.113.214'
'85.17.72.66'
'172.20.113.214'
'38.124.168.125'
'46.45.178.252'
'172.20.113.214'
'46.45.178.252'
'172.20.113.214'
'172.20.113.1'
'46.45.178.252'
'172.20.113.214'
'46.45.178.252'
'172.20.113.214'
'46.45.178.252'
'172.20.113.214'
'38.124.168.125'
'172.20.113.214'
'38.113.165.77'
'172.20.113.214'
'38.124.168.125'
'172.20.113.214'
'95.211.85.42'
'172.20.113.214'
'38.113.165.77'
'172.20.113.214'}
[b n n] = unique(a);
out0 = accumarray(n,ones(numel(a),1));
out = [b, num2cell(out0)]
EDIT on comment
[A na na] = unique(a);
[B nb nb] = unique(b);
[av bv] = ndgrid(na,nb);
[v,nab,nab] = unique([av(:) bv(:)],'rows');
k = accumarray(nab,ones(numel(nab),1));
out = [A(v(:,1)) B(v(:,2)) num2cell(k)];
  2 个评论
Karan
Karan 2012-4-18
i though i have been misinterpreted by you sir , b is already given similar to a , check the pastie for the sample values of both a and b
sorry for less of info in last question
http://pastie.org/3809507
Karan
Karan 2012-4-18
hey andrei, i screwed myself , i got my problem statement wrong and i will have to get back ..thanx for the solution

请先登录,再进行评论。

更多回答(2 个)

Walter Roberson
Walter Roberson 2012-4-17
You do not show us what your "a" and "b" are for this purpose, but you cannot ndgrid a cell array. You might want to look at bsxfun(). On the other hand, it looks to me as if you should probably be using accumarray()
  1 个评论
Karan
Karan 2012-4-18
take a = ['192.168.1.1' '192.168.1.2' '192.168.1.3' ... ] and b also similar
look for http://pastie.org/3809096

请先登录,再进行评论。


Jan
Jan 2012-4-18
I guess, that you do not have:
a = ['172.20.1.1' '172.20.0.31' '172.20.114.29']
but
a = {'172.20.1.1' '172.20.0.31' '172.20.114.29'}
Andrei's solution works for number only. Therefore you could convert the string into numbers:
ac = {'172.20.1.1' '172.20.0.31' '172.20.114.29'}
a = zeros(size(ac));
for i = 1:numel(ac)
d = sscanf(ac{i}, '%d.%d.%d.%d');
a(i) = [16777216, 65536, 256, 1] * d;
end
The same for b.
  2 个评论
Karan
Karan 2012-4-18
yeah , thanx for the solution , but i want to continue with the IP address itself :)
Jan
Jan 2012-4-18
The contents of [a] *are* the IP address, but in binary form. The conversion back to strings after processing works equivalenty.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Shifting and Sorting Matrices 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by