Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MATLAB自动为动态更新的单元阵列分配不需要的尺寸_Matlab_Indexing_Default Value_Cell Array_Is Empty - Fatal编程技术网

MATLAB自动为动态更新的单元阵列分配不需要的尺寸

MATLAB自动为动态更新的单元阵列分配不需要的尺寸,matlab,indexing,default-value,cell-array,is-empty,Matlab,Indexing,Default Value,Cell Array,Is Empty,我想生成一个名为timeData的3D单元数组,以便timeData(:,:,a)对于某个整数a是一个nx1数据矩阵,行数n随a的值以1:1的对应关系变化。为此,我将生成一个名为data的二维数据数组,即nx1。此赋值语句在for循环中发生,如下所示: % Before iterating, I define an array of indices where I want to store the % data sets in timeData. This choice of storage

我想生成一个名为
timeData
的3D单元数组,以便
timeData(:,:,a)
对于某个整数
a
是一个nx1数据矩阵,行数
n
a
的值以1:1的对应关系变化。为此,我将生成一个名为
data
的二维数据数组,即nx1。此赋值语句在for循环中发生,如下所示:

% Before iterating, I define an array of indices where I want to store the 
% data sets in timeData. This choice of storage location is for 
% organizational purposes.

A = [2, 5, 9, 21, 34, 100]; % Notice they are in ascending order, but have 
                            % gaps that have no predictability.
sizeA = size(A);
numIter = A(1);

for m = 1:numIter % numIter is the number of data sets that I need to store 
                  % in timeData 

  % At this point, some code that is entirely irrelevant to my question 
  % generates a nx1 array of data. One example of this data array is below. 

  data = [1.1;2.3;5.5;4.4]; % This is one example of what data could be. Its 
                            % number of rows, n, changes each iteration, as 
                            % do its contents.

  B = size(data);
  timeData(1:B(1),1,A(m)) = num2cell(data);
end
这段代码确实将数据的所有内容按照我的要求放置在
timeData
中的适当位置。但是,它也会将
{0x0 double}
行添加到
时间数据(:,:,a)
的所有2D数组中,用于相应行数
n
不是最大行数的任何
a
。因此,很多2D数组都有10到几百个我不想要的0值行。对于没有相应数据集的
a
值,
timeData(:,:,a)
的内容是
{0x0 double}
的nx1数组

我需要在后续的代码中迭代
timeData
的内容,并且我需要能够找到
timeData(:,:,a)
中的数据集的大小,而不必以某种方式忽略所有
{0x0 double}

如何修改分配语句以解决此问题

编辑:上述示例的所需输出如下,其中n=5。将此数据集表示为a=9。

timeData(:,:,9) = {[1.1]}
                  {[2.3]}
                  {[5.5]}
                  {[8.6]}
                  {[4.4]}

现在,考虑A矩阵的一个先前值或后续值的值为<代码>数据< /代码> n=7,n=7是最大的<代码>数据< /代码>集合(最大n值)。代码>时间数据(:,:,9)在我的代码中这样输出:

timeData(:,:,9) = {[1.1]}
                  {[2.3]}
                  {[5.5]}
                  {[8.6]}
                  {[4.4]}
                  {[0x0 double]}
                  {[0x0 double]}
@Dev iL,据我所知,您的回答使我能够删除其中包含
{[0x0 double]}
的单元格(这就是我所说的“折扣”)。这是一个很好的方案B,但是有没有办法防止
{[0x0 double]}
单元格首先出现

编辑2:更新上述语句“您的答案使我能够删除其中包含
{[0x0 double]}
的单元格(这就是我所说的“折扣”)”。
cellfun(@isempty…
函数使
{[0x0 double]}
单元格转到
{[0x0 cell]}
,它不会删除它们。换句话说,
size(timeData(:,:,9))
在执行命令之前和之后是相同的。这不是我想要的。我希望
大小(timeData(:,:,9))
为5x1,而不管n代表a的任何其他值

编辑3:我刚刚意识到最理想的输出是:

timeData(:,:,9) = {[1.1;2.3;5.5;8.6;4.4]} % An n x 1 column matrix within 
                                          % the cell. 

但我可以处理这个结果或上面描述的结果。

不幸的是,我不了解您的数据集的结构,这就是为什么我不能建议更好的分配方法。但是,我想指出一个操作,您可以在创建数据后帮助处理数据:

cellfun(@isempty,timeData);
上面所做的是返回一个
逻辑
数组,其大小为
时间数据
,指示哪些单元格包含“空”内容。通常,如果任意数据类型的数组至少有一个维度等于
0
,则该数组被视为“空”

你怎样才能利用它为你带来好处

%% Example 1: counting non-empty cells:
nData = sum(~cellfun(@isempty,timeData(:)));

%% Example 2: assigning empty cells in place of empty double arrays:
timeData(cellfun(@isempty,timeData)) = {{}};

不幸的是,我不理解您的数据集的结构,这就是为什么我不能建议更好的赋值方法。但是,我想指出一个操作,您可以在创建数据后帮助处理数据:

cellfun(@isempty,timeData);
上面所做的是返回一个
逻辑
数组,其大小为
时间数据
,指示哪些单元格包含“空”内容。通常,如果任意数据类型的数组至少有一个维度等于
0
,则该数组被视为“空”

你怎样才能利用它为你带来好处

%% Example 1: counting non-empty cells:
nData = sum(~cellfun(@isempty,timeData(:)));

%% Example 2: assigning empty cells in place of empty double arrays:
timeData(cellfun(@isempty,timeData)) = {{}};
我不确定你所说的“不以某种方式打折所有
{0x0 double}
”是什么意思。您希望您的单元格数组具有空单元格而不是空的
double
数组吗?请您为您在问题中提供的示例指定预期结果(时间数据或后续元素计数)?我觉得你可以保持作业的原样,然后智能地计算非空数据。我不确定你所说的“不以某种方式打折所有
{0x0 double}
”是什么意思。您希望您的单元格数组具有空单元格而不是空的
double
数组吗?请您为您在问题中提供的示例指定预期结果(时间数据或后续元素计数)?我觉得你可以保持作业的原样,然后智能地计算非空数据。