我有一个名为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
答案 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);