【问题标题】:Matrix columns permutation python矩阵列排列python
【发布时间】:2020-10-02 09:41:26
【问题描述】:

我试图找到一个解决方案来找到矩阵的所有列排列。所以我写了这段代码,但它不起作用。

已解决:

#! python
import numpy

def permutation(matrix): 

    if numpy.size(matrix,1) == 1:
        return [matrix]

    #empty list
    m=[]

    # Iterate the input(matrix) and calculate the permutation 
    for i in range(numpy.size(matrix,1)):
        column = matrix[:,[i]]

        # Extract column[i] or m from the matrix. remMatrix is the remaining matrix
        remMatrix = numpy.concatenate((matrix[:,:i], matrix[:,i+1:]), axis=1)
                   
        # Generating all permutations where m is the first element
        for p in permutation(remMatrix):
            m.append(numpy.concatenate([column,p],axis=1))
    return m


#driver to test the function
matrix=numpy.matrix('1 2 3; 0 0 0')
for p in permutation(matrix): 
    print(p)

【问题讨论】:

标签: python numpy matrix permutation


【解决方案1】:

您没有在递归中处理基本情况。如果您传递具有单列的矩阵,则permutation 返回一个空矩阵。这是因为如果remMatrix 为空,将无法到达m = numpy.concatenate((column,p),axis=1) 行。

结果m 是一个空数组,一旦你返回它并且print 语句不会被调用。

我也不完全理解你想要做什么。大多数矩阵不会有多列排列吗?你希望所有这些矩阵最后连接起来吗?

【讨论】:

  • 哦,谢谢!实际上,我正在尝试扩展列表的代码,该列表位于方法号 2 的以下链接中,用于矩阵的列,但我使用 python 已经有几天了,我找不到完整的解决方案geeksforgeeks.org/…
  • 啊,我明白了。您实际上从示例中删除了基本案例 if len(lst) == 0if len(lst) == 1,但您的案例中也需要它们;)
  • 我尝试添加两个if语句并纠正一些错误,现在我有一些错误,但另一件事是我'print(p)'我获得了一个只有一行的数组,所以当我尝试连接或附加它不是因为沿轴 0 的尺寸不同。我用当前编辑问题中的代码
  • m 需要是您附加到的列表。这意味着您的基本案例也需要进行一些更改:if numpy.size(matrix, 1) == 1: return [matrix]。看来您实际上不需要if numpy.size(matrix, 1) == 0 案例。并且追加变为:m.append(numpy.concatenate([column, p], axis=1))
  • 现在看来可以了!太好了,非常感谢!用工作代码更新问题中的代码会更好吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
相关资源
最近更新 更多