就在我觉得自己很正派的时候,我发现一件简单的事情我无法克服。
我需要创建一个对称的行x列矩阵,其中指定了校验和的开始和块。条目应按顺序排列。
def main(start_index, block):
num_rows, num_cols = block, block
matrix = []
for r in range(num_rows):
temp = []
for c in range(num_cols):
temp.append(c)
matrix.append(temp)
return matrix
输出是: [[0, 1, 2], [0, 1, 2], [0, 1, 2]]
我想要获得的是: [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
不仅是3x3,而且是动态的。
注意:没有像numpy这样的软件包,这不是要问的重点。仅本机python。
您要追加的c值始终在0到之间num_cols。您需要c根据您所在的行进行计算。类似:
def main(start_index, block):
num_rows, num_cols = block, block
matrix = []
for r in range(num_rows):
temp = []
for c in range(0, num_cols):
temp.append(start_index + c + (r * num_cols))
matrix.append(temp)
return matrix
main(0, 3)
>> [[0, 1, 2], [3, 4, 5], [6, 7, 8]]
您也可以将此作为生成器从start_index写入row * columns,从而懒惰地生成行。例如:
def main(start_index, block):
num_rows, num_cols = block, block
total = num_rows * num_cols
for i in range(start_index, total + start_index, num_cols):
yield list(range(i, num_cols + i))
list(main(10, 4))
>> [[10, 11, 12, 13], [14, 15, 16, 17], [18, 19, 20, 21], [22, 23, 24, 25]]
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。