2

ベクトル化したい1Dnumpy.ndarray bとPythonがある場合、これは次の関数を使用して非常に簡単です。function fnumpy.vectorize

c = numpy.vectorize(f)(a)

しかし、スカラーの代わりにf1Dを返す場合、numpy.ndarray代わりに2Dを構築するにはどうすればよいnumpy.ndarrayですか?(つまり、numpy.ndarray返されるすべての1Dfを新しい2Dの行にしたいと思いnumpy.ndarrayます。)

例:

def f(x):
    return x * x

a = numpy.array([1,2,3])
c = numpy.vectorize(f)(a)

def f_1d(x):
    return numpy.array([x, x])

a = numpy.ndarray([1,2,3])
d = ???(f_1d)(a)

上記の例cでは、になりarray([1, 4, 9])ます。なる必要がある場合は何???に置き換えるd必要がありarray([[1, 1], [2, 2], [3, 3]])ますか?

4

2 に答える 2

1

代わりにこれを行うことができます:

def f_1d(x):
    return (x,x)
d = numpy.column_stack(numpy.vectorize(f_1d)(a))

出力します:

array([[1, 1],
       [2, 2],
       [3, 3]])
于 2012-11-18T06:16:40.657 に答える
0

私はあなたが形を変え繰り返すことを探していると思います

def f(x):
    return x * x
a = numpy.array([1,2,3])
b= numpy.vectorize(f)(a)
c = numpy.repeat(b.reshape( (-1,1) ),2, axis=1)
print c

出力:

[[1 1]
 [4 4]
 [9 9]]

array.shapeタプルを直接設定することもできます。純粋なPythonを作成する必要がある場合は、vectorizeを使用するのと同じことを実行できることを知っておく価値があるかもしれません。になりますmapb= numpy.vectorize(f)(a)b=map(f,a)

この種のアプローチを使用するとf_1d、情報が重複しているように見えるため、情報を複製する必要がなくなります。これは、によって最適に実行されnumpy.repeatます。

また、このバージョンは少し高速ですが、これは大きなアレイを扱っている場合にのみ問題になります。

于 2012-11-18T05:33:19.500 に答える