Matlab:如何在每n行中插入“NaN”

Matlab:如何在每n行中插入“NaN”,matlab,Matlab,这只是一个非常简单的例子来说明我的问题 a=ones(5) 如何在每两行后插入NaN,如: 我知道做这个简单例子的方法是: b(:,1:5)=NaN [a(1:2,:);b;a(3:4,:);b;a(end,:)] 但问题是,如果martrix是60000×200,可能会更大,那么如何在每两行后面插入'NaN' 非常感谢 我想不出一个简单的单线式解决方案。这可以在一个非常紧密的循环中完成 a = ones(5); a_with_nans = nan(floor(size(a,1)*(

这只是一个非常简单的例子来说明我的问题

a=ones(5)  
如何在每两行后插入NaN,如:

我知道做这个简单例子的方法是:

b(:,1:5)=NaN

[a(1:2,:);b;a(3:4,:);b;a(end,:)]
但问题是,如果martrix是60000×200,可能会更大,那么如何在每两行后面插入'NaN'


非常感谢

我想不出一个简单的单线式解决方案。这可以在一个非常紧密的循环中完成

a = ones(5);

a_with_nans = nan(floor(size(a,1)*(3/2)), size(a,2)); %Start with all nans in a larger matrix
for ix = 1:2:size(a,1)
    a_with_nans(ix*3/2-(1/2),:) = a(ix,:);
    if ix+1<=size(a,1)
        a_with_nans(ix*3/2-(1/2)+1,:) = a(ix+1,:);
    end
end

我想不出一个简单的单线式解决方案。这可以在一个非常紧密的循环中完成

a = ones(5);

a_with_nans = nan(floor(size(a,1)*(3/2)), size(a,2)); %Start with all nans in a larger matrix
for ix = 1:2:size(a,1)
    a_with_nans(ix*3/2-(1/2),:) = a(ix,:);
    if ix+1<=size(a,1)
        a_with_nans(ix*3/2-(1/2)+1,:) = a(ix+1,:);
    end
end

您可以这样做:

>> a= [ 1 2 3 4 5 6 7 8 9]
a =
     1     2     3     4     5     6     7     8     9

>> b = nan(floor(length(a)/2),1)'
b =
   NaN   NaN   NaN   NaN

>> a_new = zeros(1, length(a)+length(b))
a_new =

     0     0     0     0     0     0     0     0     0     0     0     0     0

>> b_i = 3:2:length(a)
b_i =

     3     5     7     9

>> a_new(b_i+(0:length(b_i)-1)) = b
a_new =
     0     0   NaN     0     0   NaN     0     0   NaN     0     0   NaN     0

>> a_new(~isnan(a_new))=a
a_new =
     1     2   NaN     3     4   NaN     5     6   NaN     7     8   NaN     9

您可以这样做:

>> a= [ 1 2 3 4 5 6 7 8 9]
a =
     1     2     3     4     5     6     7     8     9

>> b = nan(floor(length(a)/2),1)'
b =
   NaN   NaN   NaN   NaN

>> a_new = zeros(1, length(a)+length(b))
a_new =

     0     0     0     0     0     0     0     0     0     0     0     0     0

>> b_i = 3:2:length(a)
b_i =

     3     5     7     9

>> a_new(b_i+(0:length(b_i)-1)) = b
a_new =
     0     0   NaN     0     0   NaN     0     0   NaN     0     0   NaN     0

>> a_new(~isnan(a_new))=a
a_new =
     1     2   NaN     3     4   NaN     5     6   NaN     7     8   NaN     9

在每N行之后插入?这个怎么样-aN:N:end,:=NaN?你是说插入还是替换?啊,对了,是插入!?插入时不替换原始值每N行插入一次?这个怎么样-aN:N:end,:=NaN?你是说插入还是替换?啊,对了,是插入!?插入而不替换原始值Brilliant,感谢lotBrilliant,感谢lotThanks的回复,上面显示的Luis Mendo方法非常好感谢回复,上面显示的Luis Mendo方法非常好中间结果似乎有意义,但这行不起作用:a_newb_i+0:lengthb_i-1=b。此外,这仍然需要一些工作来拟合矩阵而不是向量。忘记粘贴一行,我的糟糕。在索引中添加::并不难:中间结果似乎有意义,但这行不起作用:a_newb_i+0:lengthb_i-1=b。此外,这仍然需要一些工作来拟合矩阵而不是向量。忘记粘贴一行,我的糟糕。在索引中添加,:并不难: