简体   繁体   English

python,创建矢量的优雅方式

[英]python, elegant way of creating vectors

what is elegant way to create set of ALL vectors of dimension N, that each element is integer between 0 and K inclusive ([0, K]). 什么是创建维N的所有向量集的优雅方法,每个元素是0到K之间的整数([0,K])。

my current code is : 我目前的代码是:

def nodes_init(n, k):
    nodes = {}
    e = np.identity(n)
    nodes[tuple(np.zeros(n))] = 0
    s = Set()
    s.add(tuple(np.zeros(n)))
    s_used = Set()
    while len(s) != 0:
        node = s.pop()
        if node in s_used:
            continue
        s_used.add(node)
        for i in xrange(len(e)):
            temp = node + e[i]
            temp = cap(temp, k)
            temp = tuple(temp)
            nodes[temp] = 0
            if not temp in s_used:
                s.add(temp)
    return nodes

def cap(t, k):
    for i in xrange(len(t)):
        if t[i] > k:
            t[i] = k
    return t

and I don't like it. 而且我不喜欢它。 keys of dictionary nodes are desired vectors. 字典nodes键是期望的矢量。

Use itertools 使用itertools

from itertools import product

def nodes_iter(n, k):
    """ returns generator (lazy iterator) rather than creating whole list """
    return product(range(k+1),repeat=n)

Example usage: 用法示例:

for node in nodes_iter(3,1):
    print node


(0, 0, 0)
(0, 0, 1)
(0, 1, 0)
(0, 1, 1)
(1, 0, 0)
(1, 0, 1)
(1, 1, 0)
(1, 1, 1)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM