major_list = [] # contains lists full off zeros and ones and at the end converted to a matrix
for i in range(unit):
major_list.append([0] * unit)
major_list[i][i] = 1
答案 0 :(得分:1)
您无法比使用numpy.identity()
更快:
np.identity(3)
代码:
import numpy as np
unit = 3
major_array = np.identity(unit)
答案 1 :(得分:1)
使用列表功能,您可以加入3个子列表
major_list = [[0] * i + [1] + [0] * (unit - i - 1) for i in range(unit)]
print(major_list)
或者更好地与numpy
一起使用Performante方式
major_list = numpy.identity(3)
print(major_list)
答案 2 :(得分:1)
测试此处建议的不同方法的性能,并假设所需的最终结果是列表列表(而不是numpy
数组),最快的时间为2.091秒,单位= 10k为:
major_list = [[0] * i + [1] + [0] * (unit - i - 1) for i in range(unit)]
numpy方法变为:
major_list = numpy.identity(unit).astype(int).tolist()
并且以2.359秒的速度排名第二。
我的方法:
major_list = [[1 if i == index else 0 for i in range(unit)]
for index in range(unit)]
远远落后于6.960秒。
最后:
major_list = [[int(c==r) for c in range(unit)] for r in range(unit)]
持续17.732秒
答案 3 :(得分:0)
如果通过优化意味着减少行数(不一定使其更快),则可以使用以下内容:
parseInt(value[i])
unit = 4
major_list = [
[ 0 ] * (i) +
[ 1 ] +
[ 0 ] * (unit - i - 1)
for i in range(unit)
]
for i in major_list:
print(i)
答案 4 :(得分:0)
以下内容使其非常简洁:
major_list = [[int(c==r) for c in range(unit)] for r in range(unit)]
这会将1
放在列索引等于行索引的位置,0
放在其他位置。
答案 5 :(得分:0)
您可以尝试以下方法:
def frame_matrix(unit):
return [[int(1) if i==j else 0 for i in range(unit)] for j in range(unit)]