3

numpy hstack を使用して配列を水平方向にスタックしようとしていますが、動作させることができません。代わりに、「行列のように見える」2D 配列ではなく、すべてが 1 つのリストに表示されます。

import numpy as np
y = np.array([0,2,-6,4,1])
y_bool = y > 0
y_bool = [1 if l == True else 0 for l in y_bool] #convert to decimals for classification
y_range = range(0,len(y))
print y
print y_bool
print y_range
print np.hstack((y,y_bool,y_range))

これを印刷します:

[ 0  2 -6  4  1]
[0, 1, 0, 1, 1]
[0, 1, 2, 3, 4]
[ 0  2 -6  4  1  0  1  0  1  1  0  1  2  3  4]

代わりに、最後の行を次のようにするにはどうすればよいですか。

[0 0 0
 2 1 1
-6 0 2
 4 1 3]
4

2 に答える 2

4

2D 配列を作成する場合は、次のようにします。

print np.transpose(np.array((y, y_bool, y_range)))
# [[ 0  0  0]
#  [ 2  1  1]
#  [-6  0  2]
#  [ 4  1  3]
#  [ 1  1  4]]
于 2012-09-01T15:43:08.563 に答える
2

まあ、h は水平方向/列方向に十分近いです。そのヘルプを確認すると、関連項目の下に表示されます。

vstack : Stack arrays in sequence vertically (row wise).
dstack : Stack arrays in sequence depth wise (along third axis).
concatenate : Join a sequence of arrays together.

編集:最初の考えvstackはそれを行いますが、それは ifnp.vstack(...).Tまたはnp.dstack(...).squeeze(). それ以外の「問題」は、配列が1Dであり、それらを2Dのように動作させたいということです。

print np.hstack([np.asarray(a)[:,np.newaxis] for a in (y,y_bool,y_range)])

これnp.asarrayは、変数の 1 つがリストの場合に備えてあります。はnp.newaxis、連結時に何が起こるかを明確にするために、それらを 2D にします。

于 2012-09-01T15:43:21.523 に答える