2011-11-09 6 views
1

以下の便利なループイディオムを考えてみましょう。この場合には、形状(2,1)を持つ配列を戻しながらnumpy配列をループするときに同じ次元のサブ配列を返す

import numpy 

print "shape of" 
x = numpy.array([['a', 'b'], ['c', 'd']]) 
print x 
print "is", x.shape 
for row in x: 
    print "shape of", row, "is", row.shape 

これは、1つの便利なfor row in xイディオムを保存することができ、

shape of 
[['a' 'b'] 
['c' 'd']] 
is (2, 2) 
shape of ['a' 'b'] is (2,) 
shape of ['c' 'd'] is (2,) 

私の質問はできますか?ありがとう。 サブアレイの形状を(2、)から(2,0)に変換する関数は問題ありません。例えば。私はあなたがそれを望む理由は表示されませんが、あなたはこの試み与える可能性

shape of ['a' 'b'] is (2,1) 
+0

@Woltan:右、編集しました。ありがとう。 –

答えて

1

返す

for row in x: 
    print "shape of", somefunc(row), "is", row.shape 

:私のoptinionで

for row in x: 
    print "shape of", row, "is", numpy.reshape(row, (1, row.size)).shape 

を、1Dアレイは簡単です処理する。ですから、それを「1次元行列」に再構成することは私にはあまり意味がありません。

+0

ありがとうございますが、あなたは '(row.size、1)'と書いていたと思います。 –

+0

@FaheemMitha '['a' 'b']'は行ベクトルなので '(1、number_of_elements)'でなければなりません。 – Woltan

+0

あなたは正しいです。ところで、私は2次元配列を必要とする関数を持っているので、私は次元を変更する以外に選択肢はありません。 –

2

あなたはどのnumpyの配列のランクを上げるためにnumpy.expand_dimを使用することができます。

In [7]: x=np.array([1,2,3,4]) 

In [8]: x.shape 
Out[8]: (4,) 

In [9]: np.expand_dims(x,axis=-1).shape 
Out[9]: (4, 1) 
+0

これはすてきな解決策です。それは一般的にどのように「形を変える」と比較しますか? –

+0

@FaheemMitha 'expand_dims'と' reshape'のどちらもメモリ内の新しい場所に配列をコピーしないので、どちらのアプローチも本当に同等です。だからあなたが好む味の問題になります。 – Woltan

+0

@ウォルタン: 'reshape'はもっと一般的ではありませんか? –

関連する問題