获取列表多个数组

时间:2016-01-29 19:26:53

标签: python arrays loops numpy combinations

我有一个数字数组,称为X形状(1,19)。

我也有一些功能,例如Xnp.log(X)1/(1+np.exp(-X))等等。

我需要在数组中的每个项目上获得所有具有应用函数的数组组合。

例如:

X = [ 1 2 3 ]

Y[1] = [ 1 2 3] Y[2] = [ ln(1) 2 3 ] Y[3] = [ 1 ln(2) 3 ] ... Y[k] = [ ln(1) ln(2) ln(3) ] ... Y[m] = [ 1 ln(2) exp(3)] ... Y[n] = [ exp(1) exp(2) exp(3) ]

有可能吗?

3 个答案:

答案 0 :(得分:0)

这是一个完全符合你想要的例子,但是在一个小得多的X和2个函数上:

namespace TestApp
{
class Program
{
    static void Main(string[] args)
    {
        while (!MySingleton.Instance.IsReady)
            Thread.Sleep(100);
        Console.WriteLine("Done");
        Console.Read();
    }
}

public class MySingleton
{
    static MySingleton()
    {
    }

    private static readonly MySingleton instance = new MySingleton();
    private static bool threadFinished = false;
    public bool IsReady
    {
        get { return threadFinished; }       
    }

    private MySingleton()
    {
        Thread t = new Thread(new ThreadStart(MyAction));

        t.Start();
    }

    public static MySingleton Instance
    {
        get { return instance; }
    }
    static void MyAction()
    {
        threadFinished = true;
    }
}

答案 1 :(得分:0)

以下是使用list-comprehension的答案

import itertools
import math

def iden(x):
    return x

def log(x):
    return math.log(x)

def exp(x):
    return 1/(1+math.exp(-x))

X = [1, 2, 3]
funcs = [iden, log, exp]

def apply(functions, values):
    return [func(val) for func,val in zip(functions, values)]

values = [apply(f, X) for f in itertools.product(funcs, repeat=len(funcs))]

apply功能似乎很有用。如果你不想要它,那么这将做

values = [[func(val) for func,val in zip(f, X)] for f in itertools.product(funcs, repeat=len(funcs))]

示例输出

[1, 2, 3] # (iden, iden, iden)
[1, 2, 1.0986122886681096] # (iden, iden, log)
[1, 2, 0.95257412682243336] # (iden, iden, exp)
[1, 0.69314718055994529, 3] # (iden, log, iden)

答案 2 :(得分:0)

functions=np.array([np.abs,lambda x : -x,np.square])
values=np.arange(3)
nf,nv=len(functions),len(values)
select=[[int(x) for x in np.base_repr(k,nf,nv)[-nv:]] for k in range(nf**nv)]
Y=[[f(x) for f,x in zip(functions[s],values)] for s in select]

选择nf**nv元素:

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

然后Y就是你想要的。