【问题标题】:Use Python Loop to create NX3 matrix使用 Python Loop 创建 NX3 矩阵
【发布时间】:2020-07-27 01:46:46
【问题描述】:

我对 Python 还是很陌生。正在进行的项目涉及从一组数字创建一个 N X 3 矩阵,numbers∈[0,1,2] 其中每一行将由这些数字的组合填充,例如 [0,0,0], [0, 0,1],[0,0,2]...[2,2,2]。

代码是:

import numpy as np
numbers = []

x = 0
while x < 2:
    y = 0
    while y < 2:
        z = 0
        while z < 2:
            numbers.append((x,y,z))
            z += 1
        numbers.append((x,y,z))
        y += 1    
    numbers.append((x,y,z))
    x += 1
print(np.asarray(numbers))

但输出只有:

[[0 0 0]
 [0 0 1]
 [0 0 2]
 [0 1 0]
 [0 1 1]
 [0 1 2]
 [0 2 2]
 [1 0 0]
 [1 0 1]
 [1 0 2]
 [1 1 0]
 [1 1 1]
 [1 1 2]
 [1 2 2]]

它应该包含 27 行。不过也可以使用itertools.product 来完成。但是如何重写代码以获取所有行呢?

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    更快更容易阅读的代码是:

    result = np.array(list(itertools.product([0,1,2], repeat=3)))
    

    (如果您可以使用库函数,请不要重新发明轮子)。

    但如果您坚持使用 3 个嵌套循环,请运行:

    numbers = []
    for x in range(3):
        for y in range(3):
            for z in range(3):
                numbers.append((x,y,z))
    result = np.array(numbers)
    

    您的代码中的错误是:

    • 它应该只包含最内部的numbers.append((x,y,z)),
    • 所有 3 个循环都应该是 while ... &lt;= 2:

    但我的代码更短。

    【讨论】:

    • 使用 while 循环 for 具有将增量设置为任何实数的优点。 while ... &lt;= 2: 还将包括 3,因为增量为 +1。
    猜你喜欢
    • 1970-01-01
    • 2014-06-20
    • 1970-01-01
    • 2022-09-30
    • 2020-07-09
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多