combine each entry of a cell array and a double array

2 次查看(过去 30 天)
I have two arrays - one cell array and one double array, can you please help me how can I combine each element of both arrays.
e.g. A is a cell array of 3 rows (with elements A1,A2,A3) and B is double array of 2 rows (with elements B1 and B2)
I want a 3*2 array like below array
A1B1 A1B2
A2B1 A2B2
A3B1 A3B2
Thanks

采纳的回答

Jos (10584)
Jos (10584) 2014-2-17
So is A is a cell array of chars, and B is a standard array of doubles, and you want to combine it into a cell array of chars.
A = {'1928.T' '2503.T' '2914.T' '3382.T' '3407.T'}
B = [733263 733264 733267]
[Aix,Bix] = ndgrid(1:numel(A), 1:numel(B))
fh = @(k) sprintf('%s%d',A{Aix(k)},B(Bix(k)))
C = arrayfun(fh,1:numel(Aix),'un',0)
% and reshape, transpose accordingly ...
  1 个评论
Mohit
Mohit 2014-2-17
This is exactly what I was looking for. Thanks a lot Jos, You are a star!!!!
As you mentioned, I now just need to reshape.

请先登录,再进行评论。

更多回答(3 个)

Thomas
Thomas 2014-2-14
编辑:Thomas 2014-2-14
A= {'A1' 'A2' 'A3'}
B= {'B1' 'B2' }
for ii= 1:length(A)
for jj=1:length(B)
out{ii,jj}=[A{1,ii} B{1,jj}];
end
end
out

Azzi Abdelmalek
Azzi Abdelmalek 2014-2-14
编辑:Azzi Abdelmalek 2014-2-14
A={'A1','A2','A3'}
B={'B1','B2'}
[ii,jj]=ndgrid(1:numel(A),1:numel(B))
strcat(A(ii(:))',B(jj(:))')
%or
A={'A1','A2','A3'}
B={'B1','B2'}
n=numel(A);
m=numel(B);
[ii,jj]=ndgrid(1:n,1:m)
q=reshape(strcat(A(ii(:))',B(jj(:))'),n,m)
% You can add
out=arrayfun(@(x) [q{x,1} ' ' q{x,2}],(1:n)','un',0)
  2 个评论
Mohit
Mohit 2014-2-17
Even after converting B to cell array. I am unable to get the desired result. Not sure why this is happening as I dont see elements of double array in the final result. I am beginner in matlab and have gone nuts on this problem. Pls help!
'1928.T' '1928.T' '1928.T'
'2503.T' '2503.T' '2503.T'
'2914.T' '2914.T' '2914.T'
'3382.T' '3382.T' '3382.T'
'3407.T' '3407.T' '3407.T'

请先登录,再进行评论。


Jos (10584)
Jos (10584) 2014-2-14
Your talking about doubles in B? What does A1B1 mean in that case? What is A1
% Assuming all doubles
A = {10 ; 11 ; 12}
B = [7 13]
Adouble = [A{:}]
% some juggling with order, transposes and concatenations ...
[bb,aa] = ndgrid(B,Adouble)
R = reshape([aa(:).' ; bb(:).'],numel(B)*2,[]).'
  2 个评论
Jos (10584)
Jos (10584) 2014-2-14
Note that
[aa,bb] = ndgrid(Adouble, B)
R = [aa(:) bb(:))
returns the same information ...
Mohit
Mohit 2014-2-17
Sorry for not being clear. So lets say A is a cell array with below components
1928.T
2503.T
2914.T
3382.T
3407.T
and B is a double array with below components:
733263
733264
733267
I want a matrix as below:
1928.T733263 2503.T733263 2914.T733263 3382.T733263 3407.T733263
1928.T733264 2503.T733264 2914.T733264 3382.T733264 3407.T733264
1928.T733267 2503.T733267 2914.T733267 3382.T733267 3407.T733267

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Multidimensional Arrays 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by