0

好的。我有一个简单的问题,尽管我对 Matlab 还是很陌生(自学)。所以我想要一个1x6矩阵如下所示:

0

0

1

0

321, 12      <--- needs to be in one box in 1x6 matrices

4,30,17,19   <--- needs to be in one box in 1x6 matrices 

有没有可能的方法来做到这一点,或者我只需将它们全部写在单独的框中,从而使其成为一个1x10矩阵?

我的代码:

event_marker = 0;
event_count  = 0;
block_number = 1;

date = [321,12] % (its corresponding variables = 321 and 12)

time = [4,30,17,19] % (its corresponding variable = 4 and 30 and 17 and 19)
4

3 回答 3

3

因此,如果我理解正确,您需要一个包含 6 个元素的数组,其中 1 个元素等于1,另一个元素是数组[312,12],最后一个元素是数组[4,30,17,19]

我将建议两件事来实现这一点:矩阵和单元阵列。

元胞数组

在 Matlab 中,cell数组是任意类型数据的容器。您使用花括号定义它(而不是矩阵的大括号)。所以,例如,

C = {'test', rand(4), {@cos,@sin}}

是包含一个字符串 ( C{1})、一个普通矩阵 ( C{2}) 和另一个包含函数句柄 ( C{3}) 的单元格的东西。

对于您的情况,您可以这样做:

C = {0,0,1,0, [321,12], [4,30,17,19]};

或者当然,

C = {0, event_marker, event_count, block_number, date, time};

矩阵

根据您使用它的位置,普通矩阵也可能就足够了:

M = [0  0  0  0 
     event_marker  0  0  0 
     event_count  0  0  0
     block_number  0  0  0 
     321 12  0  0
     4 30 17 19];

请注意,您需要一些填充(意思是,您必须以某种方式在右上角添加这些零)。有很多方法可以做到这一点,但我会“把它作为练习”:)

同样,这完全取决于上下文,哪个更容易。

于 2013-04-10T15:04:47.467 回答
1

考虑为您的任务使用元胞数组而不是矩阵。

data = cell(6,1); % allocate cell
data{1} = event_marker; % note the curly braces here!
...
data{6} = date;   % all elements of date fits into a single cell.
于 2013-04-10T15:02:08.667 回答
0

如果您的datetime变量实际上代表日期(天数、月数、年数)和时间(小时、分钟、秒),则可以将它们打包成一个或两个数字。

查看DATENUM函数。如果您有一个向量,例如,[2013, 4, 10]表示 2013 年 4 月 10 日,您可以将其转换为序列日期:

daten = datenum([2013, 4, 10]);

如果您一年中有天数,那没关系,但没有几个月。datenum([2013, 0, 300])也将工作。

时间可以和日期一起打包,也可以单独打包:

timen = datenum([0, 0, 0, 4, 30, 17.19]);

或者

datetimen = datenum([2013, 4, 10, 4, 30, 17.19]);

获得此序列日期后,您可以将其与其他数字一起保存在一个向量中。

您可以使用DATEVECDATESTR函数将此数字转换回日期向量或日期字符串。

于 2013-04-10T15:44:12.150 回答