30

メソッドのPython scipyモジュールで非常に基本的な例を試していますtranspose()が、期待どおりの結果が得られません。私はpylabモードでIpythonを使用しています。

a = array([1,2,3]
print a.shape
>> (3,)

b = a.transpose()
print b.shape
>> (3,)

配列「a」と「b」の内容を出力すると、それらは似ています。

期待は次のとおりです:(転置のMatlabの結果になります)

 [1,
  2,
  3]
4

4 に答える 4

33

NumPy はtranspose()効果的に配列の形状を逆にします。配列が 1 次元の場合、これは効果がないことを意味します。

NumPy では、配列

array([1, 2, 3])

array([1,
       2,
       3])

は実際には同じです – 空白のみが異なります。おそらく必要なのは、対応する2次元配列であり、これtranspose()はうまく機能します。NumPy のmatrix型の使用も検討してください。

In [1]: numpy.matrix([1, 2, 3])
Out[1]: matrix([[1, 2, 3]])

In [2]: numpy.matrix([1, 2, 3]).T
Out[2]: 
matrix([[1],
        [2],
        [3]])

ほとんどのアプリケーションでは、単純な 1 次元配列は行ベクトルまたは列ベクトルとして正常に機能しますが、Matlab から取得する場合は、numpy.matrix.

于 2012-08-09T14:23:45.717 に答える
31

転置は、1 次元配列のヌープです。

新しい軸を追加して転置:

>>> a[None].T
array([[1],
       [2],
       [3]])
>>> np.newaxis is None
True

または、次のように変形します。

>>> a.reshape(a.shape+(1,))
array([[1],
       [2],
       [3]])

または、@Sven Marnach がコメントで提案したように、最後に新しい軸を追加します。

>>> a[:,None]
array([[1],
       [2],
       [3]])
于 2012-08-09T14:31:09.377 に答える
9

1D 配列を 2D 配列に再形成するより簡潔な方法は次のとおりです。

a = np.array([1,2,3]),  a_2d = a.reshape((1,-1)) or a_2d = a.reshape((-1,1))

形状ベクトルの -1 は、「これを機能させる任意の数を入力する」ことを意味します。

于 2012-08-09T14:44:09.287 に答える
6

a = array([[1,2,3]])またはa = array([[1],[2],[3]])、つまりa、行列 (行ベクトル、列ベクトル) である必要があります。

于 2012-08-09T14:23:36.943 に答える