Arrays 初学者-如何在Matlab中打印数组的外部值?

Arrays 初学者-如何在Matlab中打印数组的外部值?,arrays,matlab,Arrays,Matlab,我想编写一个函数,接收数组作为参数,然后使用循环更好地打印数组的外部值 e、 g.如果A=[1,2,3,4;5,6,7,8;9,10,11,12] 然后调用printFrameA将显示如代码所示 这是我所能得到的,所以我只得到一个只有0的数组,不知道这个方法是否能使我最终达到数组帧的目的。 % the text was not showing clear enough I want it to display like the following 1 2 3 4 5

我想编写一个函数,接收数组作为参数,然后使用循环更好地打印数组的外部值

e、 g.如果A=[1,2,3,4;5,6,7,8;9,10,11,12]

然后调用printFrameA将显示如代码所示

这是我所能得到的,所以我只得到一个只有0的数组,不知道这个方法是否能使我最终达到数组

帧的目的。
% the text was not showing clear enough I want it to display like the following
1   2   3    4
5            8
9   10  11  12 


function F = printFrame(A)
mat = [];
[m,n]=size(A);
for i=1:n
e = A(1,i);
mat = [mat,e];   
end
for j=2:(m-1)
e = A(j,1);
mat = [mat,e];
   for k = 2:(n-1)
   A(j,k)=0;
   g = A(j,k);
   mat = [mat,g];
   end
e = A(j,end);
mat = [mat,e];
end
for i=1:n
h = A(end,i);
mat = [mat,h];
end

for l = 1:length(mat);
F = fprintf('%5d',mat(l));
 if rem(l,n) == 0
    fprintf('\n');
 end
end 
fprintf('\n\n')
end

我相信这样的东西应该足够强大。我相信有一个更聪明的解决方案,但这似乎是可行的

A = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12];
dims = size(A);

logicalmatrix = true(dims);
logicalmatrix(2:end-1, 2:end-1) = false;

A = A.'; % Transpose because MATLAB works column-wise
output = A(logicalmatrix);
根据您的评论编辑:

A = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12];
dims = size(A);

A = arrayfun(@num2str, A, 'UniformOutput', 0).';
A(2:end-1, 2:end-1) = repmat({''}, dims - 2);

outstr = sprintf(strcat(repmat('%2s ', [1, dims(2)]), '\n'), A{:})
返回:

outstr =

 1  2  3  4
 5        8
 9 10 11 12
正如我上面的回答,我相信有一个聪明的解决办法。虽然更紧凑,但我不确定arrayfun调用是否会比for循环快。这应该是相当健壮的,唯一不健壮的是sprintf调用%2s部分中的字符串输出,我包括了该部分以确保单元格被均匀填充,否则您将得到以下结果:

outstr =

1 2 3 4
5   8
9 10 11 12
您必须将该值更改为最大数字的宽度,如果为负数,则必须使用负号。我一直在考虑针对这一点的一些健壮的解决方案,但还没有完全确定一个优雅的解决方案

用于创建遮罩并将其应用为遮罩。A需要进行转置,以获得所需的顺序,先是行,然后是列

B = A.'; %'
mask = bsxfun(@or, [1 zeros(1,size(B,2)-2) 1], [1; zeros(size(B,1)-2,1); 1]);
result = B(mask).'; %'
disp(result)

这是我能做到的最简单的事情。生成的矩阵包含字符串而不是数值,但如果只是打印出来,应该可以

A = [1, 2, 3, 4; 5, 6, 7, 8; 9, 10, 11, 12];
S = num2str(A);
S(2:end-1,2:end-1)=' ';
disp(S);
输出为:

1    2    3    4
5              8
9   10   11   12

你真的需要定义什么是这个外部值……除非有人能解释,否则对我来说没有意义……对不起,我已经在我的代码中添加了我想要的格式,希望这会更有意义。谢谢。我很抱歉造成这么多混乱,我已经在代码的前几行添加了我想要的数组格式,希望这会更有意义,请看一看。此外,这是初学者可以使用的更简单的功能吗?喜欢打圈吗?因为我觉得这个有点困惑。谢谢。@Chaney可以用循环来完成,但在Matlab中,您通常会尝试避免循环。是的,bsxfun有点高级,但它是一个非常有趣且灵活的函数,因此我建议您,很抱歉造成这么多混乱,我已经在代码的前几行中添加了我想要的数组格式。我需要它是一个矩阵而不是向量。类似于数组的帧,但仅显示外部值。希望这会更有意义,请看一看。非常感谢。