在Python中,如何在没有NumPy的情况下将矩阵的行转换为列?
我正在用Python编写一个数独解算器,我需要在其中创建函数。其中一个检查数独矩阵并返回其中包含重复数字的行数在Python中,如何在没有NumPy的情况下将矩阵的行转换为列?,python,list,numpy,Python,List,Numpy,我正在用Python编写一个数独解算器,我需要在其中创建函数。其中一个检查数独矩阵并返回其中包含重复数字的行数 def findRepeatsInColumn(matrix): numRepeats = 0 for row in matrix: safeChars=['[', ']', '/'] usedChars=[] for char in str(row): if char in usedChars a
def findRepeatsInColumn(matrix):
numRepeats = 0
for row in matrix:
safeChars=['[', ']', '/']
usedChars=[]
for char in str(row):
if char in usedChars and char not in safeChars:
numRepeats += 1
break
else:
usedChars.append(char)
return numRepeats
如果我将一个矩阵[[1,1,1],[2,2,2],[3,3,3]]
传递给它,它可以正常工作,并给出输出3,但是为了检查所有列的重复数字,我需要将行转换为列,这意味着我需要类似于:输入:[[1,1,1],[2,2],[3,3]]
输出:[[1,2,3],[1,2,3],[1,2,3]]
有没有想过没有NumPy我怎么做 一个简单的方法是使用
zip
和*
:
>>> ip = [[1, 1, 1], [2, 2, 2], [3, 3, 3]]
>>> print(list(zip(*ip)))
[(1, 2, 3), (1, 2, 3), (1, 2, 3)]
假设您有一个名为
m
transposed = zip(*m)
如果您的输入是
numpy.array
,则可以使用转置:
i = np.array([[1,1,1], [2,2,2], [3,3,3]])
print(i.T)
输出:
[[1 2 3]
[1 2 3]
[1 2 3]]
或者您可以使用:
list(map(list, zip(*i)))
建议:使用numpy,它的优化建议2:使用
[[1,1,1],[2,2,2],[3,3,3]]
而不是[[111],[222],[333]
@AngusTay我几乎不相信将你需要为数独解算器实现的操作矢量化是容易的。除非计划使用Numba.@Angus,否则在numpy中转置是很容易的,但像这样的迭代比较慢。与阵列的转换也很慢。