combine each entry of a cell array and a double array

1 回表示 (過去 30 日間)
Mohit
Mohit 2014 年 2 月 14 日
コメント済み: Mohit 2014 年 2 月 17 日
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 日
Array B is double array so it is giving me error.
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 Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by