将张量中的非零条目重新排列为矩阵

时间:2018-02-28 09:37:04

标签: matlab

我有一个NxNx5数组T,我想将其转换为Rx5数组TT,以满足以下条件(其中R是数组T(:,:,1)的非零项数) :

如果T(i,j,1)== 0,那么我们忽略。如果T(i,j,1)!= 0那么我想要一行TT,其条目是

[T(i,j,1) T(i,j,2) T(i,j,3) T(i,j,4) T(i,j,5)]

注意T(i,j,k)(k = 2,3,4,5)可以为零。例如,

如果

T(3,2,1) = 3

然后我想要一排TT

[3 0 2 1 5].

一些注意事项:

TT的条目都是整数。 条目按列顺序强调。即TT(:,:,1)的第一列可能

[1 2 0 0 3 4 0 0 0 5 6]'

然后是下一栏

[7 8 0 0 0 0 0 9 10 11 12]' 

2 个答案:

答案 0 :(得分:0)

我认为这可以满足您的需求:

ind = find(T(:,:,1));
ind = bsxfun(@plus, ind(:), (0:size(T,3)-1)*size(T,1)*size(T,2));
result = T(ind);

答案 1 :(得分:0)

这样做:

clear
rng(343)
N=7;
K=5;
T=randi([0,4],[N,N,K])
TT=reshape(T,[N*N,K])
TT(T(:,1)==0,:)=[] %delete rows with first col equal to 0