N维数组创建

时间:2017-07-25 04:20:52

标签: python numpy

Write Function to Generate N-array with some decimal place 

>>> func(2,3) # 2d-array with 3 dp, sum those value to 1
[0.001],[0.999] 
... 
[0.999],[0.001]
>>> func(3,3)
[0.001],[0.001],[0.998]
....
[0.998],[0.001],[0.001]

我可以在使用嵌套for循环时创建这些数组。 当n> 4,创建这样的阵列既缓慢又困难。

2 个答案:

答案 0 :(得分:1)

使用import itertools as it import numpy as np def sum_generator(dim, dp, sum): i = np.linspace(0,1,10^dp)[1:-1].flat return it.ifilter(lambda x: np.sum(x)==sum, it.product(*(i,)*dim)) ,您可以执行以下操作:

ifilter

但它仍然会很慢。你for很多(与c循环基本相同的构造函数,但在n < sum完成,所以仍然快得多)

您正在做的事情被称为partitioningefficient algorithmsgenerators个整数,但它们通常涵盖String s = "arg1: val1 arg2: val2 arg3: va:l3"; Map<String, String> map = new LinkedHashMap<String, String>(); String[] splitted = s.split("arg\\d*:"); for (int i = 1; i < splitted.length; i++) { map.put(String.valueOf("arg" + (i)), splitted[i].trim()); } System.out.println(map); 所有的n维空间。你可以根据自己的目的调整一个,但是我在递归逻辑方面做得不够好,无法创建有效的生成器。

答案 1 :(得分:0)

<强>提示

我会尝试使用递归函数

def auxiliary_function(dim, dp, sum):
   if sum < 0:
        raise Exception("error")
   if dim == 1:
        return [sum]
   val = random.random(1, sum * 10 ** dp - 1) / 10 ** dp
   aux_list = auxiliary_function(dim - 1, dp, sum - val)
   aux_list.append(val)
   return aux_list

然后我会打电话给auxiliary_function(dim, dp, 1)

此辅助递归函数的目标是返回精度dim的{​​{1}}元素列表,其总和为dp

我让你调整这个函数来返回你正在寻找的所有可能的数组(主要是你必须用sum的随机生成替换0.001之间的循环(精度为val)和dp