将矢量存储到单元阵列中

时间:2017-11-22 16:46:00

标签: matlab matrix vector cell-array

我有一个名为R的128x100矩阵。

我有一个名为I的另一个1x100矩阵。 载体I中的值范围为1-64。

e.g。我:[13,22,55,63 ...,35]

R和I的元素之间存在一对一的对应关系。

我想知道I的每个唯一值,即如果1出现在向量I中的六个位置(第12,20,35,62,85,95列),如何连接相应的(第12列, 20,35,62,87,95)R中的列并将信息存储在单个单元格阵列S中,用于1-64的所有此类值。

我尝试过,但我无法想到一个紧凑而正确的代码。

for j = 1:64
   for i = 1:100
       if I(i) == j
           S{j} = R(:,i);
       end      
   end    
end

2 个答案:

答案 0 :(得分:4)

使用accumarray的解决方案:

S = accumarray(I(:),1:100,[64 1],@(x){R(:,x)});

如果数组I不包含1:64 S的所有值,则会有以下方式删除的空单元格:

S(cellfun(@isempty,S))=[];

*感谢@LuisMendo建议改进答案。

答案 1 :(得分:1)

这就是我想要的:

import click
from click_shell import shell
import os



@shell(prompt='Tool > ', intro='some test...', hist_file=os.path.dirname(os.path.realpath(__file__)))
def stRec():
    pass



@stRec.command()
@click.argument('name', required=True, type=click.STRING)
def set(name):
    print "nothing"



if __name__ == '__main__':
    stRec()

或者,使用等效循环:

S = arrayfun(@(n) R(:,I==n), 1:64, 'UniformOutput', false);