生成所有可能的n维k * k * ... * k数组,每个数组沿轴均带有一线

基拉索尔

我正在使用Python进行工作,需要找到一种算法来生成所有可能的n维k,k,...,k数组,每个数组沿轴线排列成一行。因此,该函数采用两个数字-n和k,并应返回一个数组列表,该数组包含沿每个轴的所有可能的k行。

例如,对于n = 2和k = 3,有6种可能性(3条水平线和3条垂直线):

[[1, 1, 1], 
 [0, 0, 0], 
 [0, 0, 0]],
[[0, 0, 0], 
 [1, 1, 1], 
 [0, 0, 0]],
[[0, 0, 0], 
 [0, 0, 0], 
 [1, 1, 1]],
[[1, 0, 0], 
 [1, 0, 0], 
 [1, 0, 0]],
[[0, 1, 0], 
 [0, 1, 0], 
 [0, 1, 0]],
[[0, 0, 1], 
 [0, 0, 1], 
 [0, 0, 1]]

对于n = 3和k = 3,有27种可能性(9条线,每3条轴各有3条)。

不幸的是,我什至不知道如何对任意n和k进行处理。有什么建议么?

保罗·潘泽

这是一种生成器方法,itertools.product用于获取放置线的索引。itertools.product通常对于替换可变深度的嵌套循环很有用:

import numpy as np
import itertools

def lines(n, k):
    for axis in range(n):
        ranges = ((slice(None),) if a==axis else range(k) for a in range(n))
        for idx in itertools.product(*ranges):
            ret = np.zeros(n*(k,), dtype=int)
            ret[idx] = 1
            yield ret

for line in lines(2, 3):
    print(line)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

数组(k,)或(k,n)乘以一维数组(k,)

给定一个数组,如何生成子集大小k的所有组合?

所有可能的N选择K,无回音

生成具有所有唯一k位子序列的所有n位序列。

如何在矩阵中生成所有可能的 k 大小向量(包括对角线)?

算法 - 在 n*n 二维矩阵中查找 k*k 集的所有最大值

如果每个元素可以递增或递减值 k,则打印数组所有可能的算法

迭代找到字符数组大小为k的所有组合(N选择K)

生成所有唯一的k子序列

递归生成char数组中所有字符(长度为k)的组合的字符串数组

从nxk DataFrame生成所有行对的(n over 2)x 2k DataFrame

生成所有n个选择k个二进制向量python

递归生成所有数字总和为n的k位数字

从 N 生成长度 K 的所有无序排列的快速算法

创建将n个用户划分为k个组的所有可能方式

创建C中n项的k和m组合的所有可能子集

K个桶中N个对象的所有可能组合

查找长度为k的向量的所有非等价排列,并取n个可能值

在k个组上拆分n的所有可能方法-R

使用所有可能的顺序创建最大长度 K 的 N 个列表

给定一组 n 个整数,列出 k1<= sum <=k2 、 k1 和 k2 浮点数的所有可能子集

所有可能组合的最快解决方案,在k> 2和n大的情况下,从n个可能的元素中取出k个元素

用x计算x ** k,k是任意维数的数组

枚举具有N个元素的1d数组的所有k分区?

JavaScript:返回总和等于 K 的所有连续子数组

长度为k的所有子数组的元素的乘积和

对于所有k,n ^ k是否为O(2 ^ n)?

当一个数组被分成K个子数组/组时,最大化所有子数组中的最小子数组和

找到 1 到 k 之间 n 个数字的所有唯一组合