如何随机浮点值追加到循环中阵列

问题描述 投票:0回答:4

我有一组将被安排成在每一个产生它们中的67循环结束时的数组随机浮点值的,但是,也有64个总循环。作为一个例子,如果我有每个环路4个值和整数的3个总回路,我想它是这样的:值= [[0,4,5,1],[6,6,5,3], [0,0,0,7],这样我可以识别它们作为单独的阵列,但是,我不确定要追加在创建后的值的最佳方式,但我知道如何回报他们。请原谅我,我用不熟练的逻辑。

import math
import random

funcs = []
coord = []

pi = math.pi

funcAmt = 0
coordAmt = 0
repeatAmt = 0
coordPass = 0

while funcAmt < 64:
    while coordAmt < 67:
        coordAmt += 1
        uniform = round(random.uniform(-pi, pi), 2)
        print("Coord [",coordAmt,"] {",uniform,"} Func:", funcAmt + 1)
        if uniform in coord:
            repeatAmt += 1
            print("Repeat Found!")
            coordAmt -= 1
            print("Repeat [",repeatAmt,"] Resolved")
            pass
        else:
            coordPass += 1
            coord.append(uniform)
    #<<<Append Here>>>
    funcAmt += 1
    coord.clear()
    coordAmt = 0

在我的上述给定的代码,这将是类似于:FUNC = [[<67项>],... 63分多次]

python arrays
4个回答
1
投票

您的“追加这里”逻辑应该追加坐标列表,然后清除该列表中的外循环的下一次迭代:

funcs.append(coord[:])    # The slice notation makes a copy of the list
coord.clear()             # or simply coord = []

你应该学会使用for循环。这将简化您的循环:你不必自己维护计数。例如:

for funcAmt in range(64):
    for coordAmt in range(67):
        ...

你也可以查找如何做一个“列表理解”,这可以将流程简化为一个单一的代码行 - 很长,涉及路线,但可读适当的空白。

这是否让你感动?


0
投票

有一对夫妇的解决这个办法。而不是使用while名单和计数器,你可以只使用for循环。或者至少做到这一点对外部循环,因为它看起来像你还是要检查重复。下面是使用你原来的3和4个维度的例子:

from math import pi
import random

coord_sets = 3
coords = 4

biglist = []
for i in range(coord_sets):

    coords_set = []
    non_repeating_coords = 0
    while non_repeating_coords < coords:
        new_coord = round(random.uniform(-1.0*pi, pi), 2)
        if new_coord not in coords_set:
            coords_set.append(new_coord)
            non_repeating_coords += 1

    biglist.append(coords_set)

print(biglist)

0
投票

您可以使用组,因为他们不允许重复值:

from math import pi
import random

funcs = []
funcAmt = 0

while funcAmt < 64:  # This is the number of loops
    myset = set()
    while len(myset) < 67:  # This is the length of each set
        uniform = round(random.uniform(-pi, pi), 2)
        myset.add(uniform)
    funcs.append(list(myset))  # Append randomly generated set as a list
    funcAmt += 1

print(funcs)

0
投票

也许你可以从numpy阵列中受益:

import numpy as np

funcs = np.random.uniform(-np.pi, np.pi, [63, 67])

这产生形状的从均匀-pi之间随机到pi阵列(63,67)。

© www.soinside.com 2019 - 2024. All rights reserved.