86

Pythonで行ベクトルと列ベクトルを区別する良い方法はありますか? これまでのところ、numpy と scipy を使用していますが、これまでのところ、ベクトルを与えるとしたら、次のようになります。

from numpy import *
Vector = array([1,2,3])

彼らは天気、つまり行ベクトルまたは列ベクトルを言うことができません。さらに:

array([1,2,3]) == array([1,2,3]).transpose()
True

「現実の世界」では、これは単に真実ではありません。上記のモジュールからのベクトルの関数のほとんどは区別を必要としないことを認識しています。たとえば、outer(a,b)またはa.dot(b)しかし、私は自分の都合で区別したいと思います。

4

12 に答える 12

90

配列に別の次元を追加することで、区別を明確にすることができます。

>>> a = np.array([1, 2, 3])
>>> a
array([1, 2, 3])
>>> a.transpose()
array([1, 2, 3])
>>> a.dot(a.transpose())
14

次に、強制的に列ベクトルにします。

>>> a.shape = (3,1)
>>> a
array([[1],
       [2],
       [3]])
>>> a.transpose()
array([[1, 2, 3]])
>>> a.dot(a.transpose())
array([[1, 2, 3],
       [2, 4, 6],
       [3, 6, 9]])

別のオプションは、区別したい場合に np.newaxis を使用することです。

>>> a = np.array([1, 2, 3])
>>> a
array([1, 2, 3])
>>> a[:, np.newaxis]
array([[1],
       [2],
       [3]])
>>> a[np.newaxis, :]
array([[1, 2, 3]])
于 2013-07-02T14:55:28.960 に答える
3

1x3 配列または 3x1 配列が必要な場合:

import numpy as np
row_arr = np.array([1,2,3]).reshape((1,3))
col_arr = np.array([1,2,3]).reshape((3,1)))

あなたの仕事をチェックしてください:

row_arr.shape  #returns (1,3)
col_arr.shape  #returns (3,1)

ここで多くの回答が役に立ちましたが、私には複雑すぎました。shape実際にはandに戻りreshapeますが、コードは読みやすいです。非常に単純で明示的です。

于 2019-07-18T14:02:20.727 に答える
1

コンテキストで使用しない限り、Python の Numpy はそれを区別しないようです。

"必要に応じて標準ベクトルまたは行/列ベクトルを使用できます."

" :) ランク 1 の配列を行ベクトルまたは列ベクトルとして扱うことができます。dot(A,v) は v を列ベクトルとして扱い、dot(v,A) は v を行ベクトルとして扱います。これにより、転置をたくさんタイプしてください。」

また、コードに固有:「ランク 1 配列の転置は何もしません。」ソース: http://wiki.scipy.org/NumPy_for_Matlab_Users

于 2013-07-02T14:53:45.593 に答える
-1

優れたPandasライブラリは、これらの種類の操作をより直感的な IMO にする機能を numpy に追加します。例えば:

import numpy as np
import pandas as pd

# column
df = pd.DataFrame([1,2,3])

# row
df2 = pd.DataFrame([[1,2,3]])

DataFrame を定義して、スプレッドシートのようなピボット テーブルを作成することもできます。

于 2013-07-02T15:09:38.440 に答える