Python编程之黑板上排列组合,你舍得解开吗

Python编程之黑板上排列组合,你舍得解开吗,第1张

概述考虑这样一个问题,给定一个矩阵(多维数组,numpy.ndarray()),如何shuffle这个矩阵(也就是对其行进行全排列),如何随机地选择其中的k行,这叫组合,实现一种某一维度空间的切片。例如五列中选三列(全部三列的排

考虑这样一个问题,给定一个矩阵(多维数组,numpy.ndarray()),如何shuffle这个矩阵(也就是对其行进行全排列),如何随机地选择其中的k行,这叫组合,实现一种某一维度空间的切片。例如五列中选三列(全部三列的排列数),便从原有的五维空间中降维到三维空间,因为是全部的排列数,故不会漏掉任何一种可能性。

涉及的函数主要有:

np.random.permutation()
itertools.combinations()
itertools.permutations()

# 1. 对0-5之间的数进行一次全排列>>>np.random.permutation(6)array([3,1,5,4,2])# 2. 创建待排矩阵>>>A = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])# 3. shuffle矩阵A>>>p = np.random.permutation(A.shape[0])>>>parray([1,0])>>>A[p,:]     array([[ 5,[ 9,12],[ 1,4]])

C52的实现

>>>from itertools import combinations>>>combins = [c for c in combinations(range(5),2)]>>>len(combins)10>>>combins    # 而且是按序排列[(0,1),(0,2),3),4),(1,(2,(3,4)]

A52的实现

>>>from itertools import permutations>>>pertumations(range(5),2)<itertools.permutations object at 0x0233E360>>>>perms = permutations(range(5),2)>>>perms[(0,0),(4,3)]>>>len(perms)20
# 5. 任取其中的k(k=2)行>>>c = [c for c in combinations(range(A.shape[0]),2)]>>>A[c[0],:]   # 一种排列array([[1,8]])

下面再介绍一个列表数据任意组合,主要是利用自带的库

#_*_ Coding:utf-8 _*_#__author__='dragon'import itertoolsList1 = [1,5]List2 = []for i in range(1,len(List1)+1): iter = itertools.combinations(List1,i) List2.append(List(iter))print(List2)
[[(1,),(5,)],[(1,5),5)],5)]]

排列的实现

#_*_ Coding:utf-8 _*_#__author__='dragon'import itertoolsList1 = [1,len(List1)+1): iter = itertools.permutations(List1,i) List2.append(List(iter))print(List2)

运行结果:

[[(1,4)],3)],2)],1)]]

可以根据你需要随意组合

python实现排列组合公式C(m,n)求值

# -*- Coding:utf-8 -*- # 用python实现排列组合C(n,m) = n!/m!*(n-m)! def get_value(n):  if n==1:   return n  else:   return n * get_value(n-1) def gen_last_value(n,m):   first = get_value(n)   print "n:%s  value:%s"%(n,first)   second = get_value(m)   print "n:%s  value:%s"%(m,second)   third = get_value((n-m))   print "n:%s  value:%s"%((n-m),third)   return first/(second * third)    if __name__ == "__main__":  # C(12,5)  rest = gen_last_value(5,3)  print "value:",rest 

运行结果:

n:5  value:120n:3  value:6n:2  value:2value: 10

总结

以上就是本文关于Python排列组合算法的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:Python数据结构与算法之列表(链表,linked list)简单实现、Python算法之求n个节点不同二叉树个数等,有什么问题可以随时留言,小编会及时回复大家的。

总结

以上是内存溢出为你收集整理的Python编程之黑板上排列组合,你舍得解开吗全部内容,希望文章能够帮你解决Python编程之黑板上排列组合,你舍得解开吗所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1201383.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-04
下一篇 2022-06-04

发表评论

登录后才能评论

评论列表(0条)

保存