如何巧妙地组合数组中的数字和文本
How to combine numeric and text in an array smartly
我有一个数字数组,我希望将其与文本数组组合。
TX = {'a' 'b' 'c'}
NM = magic(30)
合并 = ([TX NM])
我如何设法从中获得以下新结构:
COMBI = a b c 位于第 1、2、3 列并且具有与第 1:30 行相同的值,
NM 的第一个数值从第 4 列开始,一直到第 33 列,并且具有来自行 1:30.
的值
我总是得到,但我想要一个矩阵中的所有值
'a' 'b' 'c' 30x30 double
但我想要
1: 'a' 'b' 'c' 30 columns of double in cell notation, i.e. '3.54'
2: 'a' 'b' 'c' 30 columns of double in cell notation, i.e. '3.54'
3: 'a' 'b' 'c' 30 columns of double in cell notation, i.e. '3.54'
...
30: 'a' 'b' 'c' 30 columns of double in cell notation, i.e. '3.54'
我该怎么做?
更新 1:感谢 Daniel,我用“”更新了示例代码
更新 2:通过先构造一个空数组并在其中粘贴数字或文本数据解决了问题,谢谢 Benoit_11
更新 3:通过使用大小不等的数字矩阵,将额外的片段添加到 Benoit 的出色解决方案中:
%// To generalize;
n = numel(TX);
NumRowCol = size(NM,1);
NumCol = size(NM,2); % <- the 'new' part considers column size
%// Initialize the cell
MyCell = cell(NumRowCol,n+NumCol);
%// Insert text in first 3 columns
MyCell(:,1:3) = repmat(TX,NumRowCol,1);
%// Fill the rest with your numeric array in "cell" format.
MyCell(:,n+1:end)= num2cell(NM);
%// Display MyCell
MyCell;
我认为您想执行以下操作。我使用大小为 5 x 5 的数值数组来演示,但在你的情况下这是相同的想法。
clear
clc
TX = {'a' 'b' 'c'};
NM = magic(5);
%// To generalize;
n = numel(TX);
NumRowCol = size(NM,1); %/// Since you use a magic matrix there are as many rows and columns. You might need to update this with different numeric arrays.
%// Initialize the cell
MyCell = cell(NumRowCol,n+NumRowCol);
%// Insert text in first 3 columns
MyCell(:,1:3) = repmat(TX,NumRowCol,1);
%// Fill the rest with your numeric array in "cell" format.
MyCell(:,n+1:end)= num2cell(NM);
%// Display MyCell
MyCell
MyCell =
'a' 'b' 'c' [17] [24] [ 1] [ 8] [15]
'a' 'b' 'c' [23] [ 5] [ 7] [14] [16]
'a' 'b' 'c' [ 4] [ 6] [13] [20] [22]
'a' 'b' 'c' [10] [12] [19] [21] [ 3]
'a' 'b' 'c' [11] [18] [25] [ 2] [ 9]
我有一个数字数组,我希望将其与文本数组组合。
TX = {'a' 'b' 'c'}
NM = magic(30)
合并 = ([TX NM])
我如何设法从中获得以下新结构:
COMBI = a b c 位于第 1、2、3 列并且具有与第 1:30 行相同的值, NM 的第一个数值从第 4 列开始,一直到第 33 列,并且具有来自行 1:30.
的值我总是得到,但我想要一个矩阵中的所有值
'a' 'b' 'c' 30x30 double
但我想要
1: 'a' 'b' 'c' 30 columns of double in cell notation, i.e. '3.54'
2: 'a' 'b' 'c' 30 columns of double in cell notation, i.e. '3.54'
3: 'a' 'b' 'c' 30 columns of double in cell notation, i.e. '3.54'
...
30: 'a' 'b' 'c' 30 columns of double in cell notation, i.e. '3.54'
我该怎么做?
更新 1:感谢 Daniel,我用“”更新了示例代码 更新 2:通过先构造一个空数组并在其中粘贴数字或文本数据解决了问题,谢谢 Benoit_11 更新 3:通过使用大小不等的数字矩阵,将额外的片段添加到 Benoit 的出色解决方案中:
%// To generalize;
n = numel(TX);
NumRowCol = size(NM,1);
NumCol = size(NM,2); % <- the 'new' part considers column size
%// Initialize the cell
MyCell = cell(NumRowCol,n+NumCol);
%// Insert text in first 3 columns
MyCell(:,1:3) = repmat(TX,NumRowCol,1);
%// Fill the rest with your numeric array in "cell" format.
MyCell(:,n+1:end)= num2cell(NM);
%// Display MyCell
MyCell;
我认为您想执行以下操作。我使用大小为 5 x 5 的数值数组来演示,但在你的情况下这是相同的想法。
clear
clc
TX = {'a' 'b' 'c'};
NM = magic(5);
%// To generalize;
n = numel(TX);
NumRowCol = size(NM,1); %/// Since you use a magic matrix there are as many rows and columns. You might need to update this with different numeric arrays.
%// Initialize the cell
MyCell = cell(NumRowCol,n+NumRowCol);
%// Insert text in first 3 columns
MyCell(:,1:3) = repmat(TX,NumRowCol,1);
%// Fill the rest with your numeric array in "cell" format.
MyCell(:,n+1:end)= num2cell(NM);
%// Display MyCell
MyCell
MyCell =
'a' 'b' 'c' [17] [24] [ 1] [ 8] [15]
'a' 'b' 'c' [23] [ 5] [ 7] [14] [16]
'a' 'b' 'c' [ 4] [ 6] [13] [20] [22]
'a' 'b' 'c' [10] [12] [19] [21] [ 3]
'a' 'b' 'c' [11] [18] [25] [ 2] [ 9]