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

问题描述 投票:-1回答:2

我有一个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]' 
matlab
2个回答
0
投票

我认为这样做你想要的:

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

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
© www.soinside.com 2019 - 2024. All rights reserved.