Matlab:汇编#cols和#rows存储在向量中的子矩阵

时间:2017-02-16 19:06:48

标签: arrays matlab matrix submatrix

我有两个向量, R C ,它们分别具有我需要在一个矩阵中组装的子矩阵的行数和列数(40x20)。共有12个子矩阵。

apply(df, 1, function(x) dist_point_line(as.numeric(x[1:2]), slope = 1, intercept = 0) )
 #[1] 0.0000000 0.7071068 1.4142136 2.1213203 2.8284271 3.5355339 2.8284271 2.1213203 1.4142136 0.7071068

此外,每个子矩阵的所有元素都将其值存储在向量 k 中:

R = [4     2     4     4     2     4];
C = [4    16    16     4];

因此,例如,子矩阵 M (1:4,1:4)有4行,4列,值等于k(1)= 1。

问题:如何将矩阵M与所有子矩阵组合在一起?

有什么想法吗? 谢谢!

修改

矩阵M应如下所示: enter image description here

和子矩阵:

enter image description here

和k的值:

enter image description here

1 个答案:

答案 0 :(得分:1)

这是一个矢量化解决方案:

def multi_file_line_iterator(files_to_check):
    print_header()
    for file in files_to_check:
        print("Checking file: {}".format(file), end="")
        with open(file) as f:
            for num, line in enumerate(f, 1):
                print("-- Checking line: {}".format(num), end="")
                yield line
                print("done with line")
        print("done with file")
    print("FOUND:", found)
    print_footer()
    return found

found = 0
for line in multi_file_line_iterator(files_to_check):
    found += checker(line)

相反,你可以使用单元格数组,用子矩阵填充它,然后将单元格数组转换为矩阵。

R1 = repelem(1:numel(R), R);
C1 = repelem(1:numel(C), C);
[CC RR] = meshgrid(C1, R1);
idx = sub2ind([numel(R), numel(C)], RR, CC);
result = k(idx);