2016-08-25 3 views
0

私は、これらのベクトルがあります。1次元配列を形状(1,4,5)の配列に再形成する方法は?

a = [1,2,3,4] 
b = [1,2,3,5] 

を、私は最後にこれを持っているのが好きでした:

A = np.reshape(a,(1,4,1)) 
B = np.reshape(b,(1,4,1)) 
:私のpythonからこの方法をnp.reshapeを使用している

A = [ [1,0,0,0,0] 
     [0,1,0,0,0] 
     [0,0,1,0,0] 
     [0,0,0,1,0] ] 

B = [ [1,0,0,0,0] 
     [0,1,0,0,0] 
     [0,0,1,0,0] 
     [0,0,0,0,1] ] 

そして私は以下の結果を得て、部分的に仕事をします:

A = [[1] 
    [2] 
    [3] 
    [4]] 

B = [[1] 
    [2] 
    [3] 
    [5]] 

理想的には、私はこのような何かをしたいと思います:

A = np.reshape(a,(1,4,(1,5)) 

が、ドキュメントを読んだとき、これが不可能です。あなたはデータの構造を変更するよう、あなたの助けを事前に

おかげで、あなたが何をしようとして

+0

あなたが考慮する必要がありますリストaのすべての項目はmax(a、b)の範囲のカテゴリ値です –

+0

aとbの値が0ベースのインデックスを前提としている場合、0は最初の列です。コードにこのような変更を加えることができますか? –

答えて

3

:)終らなければならない、numpyのは、行/列に対して複数のインデックスに値を割り当てることができます一度、例では:

In [1]: import numpy as np 

In [2]: b = [1,2,3,5] 
    ...: 
    ...: 

In [3]: zero = np.zeros([4,5]) 

In [4]: brow, bcol = range(len(b)), np.array(b) -1 # logical transform 

In [5]: zero[brow, bcol] = 1 

In [6]: zero 
Out[6]: 
array([[ 1., 0., 0., 0., 0.], 
     [ 0., 1., 0., 0., 0.], 
     [ 0., 0., 1., 0., 0.], 
     [ 0., 0., 0., 0., 1.]]) 
+1

FYI:整数配列を得るには、 'zero = np.zeros((4,5)、dtype = int)'を使います。 。 –

1

は、実際にリシェイプではありません。

A = np.zeros(myshape) 
B = np.zeros(myshape) 

と、インデックス、それらの配列

n = 0 
for i_a, i_b in zip(a, b): 
    A[n, i_a - 1] = 1 
    B[n, i_b - 1] = 1 
    n += 1 

割り当てでi_a/i_b - 1 1個のインデックス0番目の要素を作ることだけがあります:あなたが望む形で新しい配列を作成します 。これは、abの長さが同じ場合にのみ機能します。同じ長さでない場合は、この2つのループを作成します。 あり、よりエレガントな解決策になるかもしれないが、これは仕事がまた

関連する問題