web-dev-qa-db-ja.com

numpy ndarray shapeは何をしますか?

.shape関数について簡単な質問があります。

a = np.array([1, 2, 3])   # Create a rank 1 array
print(type(a))            # Prints "<class 'numpy.ndarray'>"
print(a.shape)            # Prints "(3,)"

b = np.array([[1,2,3],[4,5,6]])    # Create a rank 2 array
print(b.shape)                     # Prints "(2, 3)"

.shapeは正確に何をしましたか?行数、列数を数えると、a.shapeは(1,3)、1行3列であると仮定します。

24
Pumpkin C

yourarray.shape またはnp.shape()または np.ma.shape() は、ndarrayの形状をTuple;として返します。そして、 yourarray.ndim またはnp.ndim()を使用して、配列の(数の)次元を取得できます。 (つまり、NumPyの配列はすべてn次元配列であるため、nndarrayになります(略してndarraysと呼ばれます)

1D配列の場合、形状は(n,)になります。ここで、nは配列内の要素の数です。

2D配列の場合、形状は(n,m)になります。ここで、nは行数、mは配列内の列数です。

1Dの場合、形状は、行ベクトルと列ベクトルに対してそれぞれ(n, )または(1, n)と言ったものではなく、単に(n, 1)になることに注意してください。

これは、次の規則に従うことです。

1D配列の場合、1要素のみでshape Tupleを返します(つまり(n,)
2D配列の場合、2要素のみを含むshape Tupleを返します(つまり(n,m)
3D配列の場合、要素のみを含むshape Tupleを返します(つまり(n,m,k)
4D配列の場合、4要素のみのshape Tupleを返します(つまり(n,m,k,j)

等々。

また、以下の例を参照して、 np.shape() または np.ma.shape()1D配列およびスカラーでどのように動作するかを確認してください。

# sample array
In [10]: u = np.arange(10)

# get its shape
In [11]: np.shape(u)    # u.shape
Out[11]: (10,)

# get array dimension using `np.ndim`
In [12]: np.ndim(u)
Out[12]: 1

In [13]: np.shape(np.mean(u))
Out[13]: ()       # empty Tuple (to indicate that a scalar is a 0D array).

# check using `numpy.ndim`
In [14]: np.ndim(np.mean(u))
Out[14]: 0

PS:つまり、shape Tupleconsistentです。数学的には少なくとも。

39
kmario23

最も人気のある競合他社とは異なり、numpyは最初からほとんど「任意の次元」の配列に関するものであるため、コアクラスはndarrayと呼ばれています。 .ndimプロパティを使用して、numpy配列の次元を確認できます。 .shapeプロパティは、各次元の長さを含む長さ.ndimのタプルです。現在、numpyは最大32の次元を処理できます。

a = np.ones(32*(1,))
a
# array([[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ 1.]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]])
a.shape
# (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
a.ndim
# 32

Numpy配列が2番目の例のようにたまたま2Dである場合、行と列の観点から考えるのが適切です。しかし、numpyの1d配列は本当に1dであり、行も列もありません。

行ベクトルまたは列ベクトルのようなものが必要な場合は、その次元のいずれかが1に等しい2D配列を作成することでこれを実現できます。

a = np.array([[1,2,3]]) # a 'row vector'
b = np.array([[1],[2],[3]]) # a 'column vector'
# or if you don't want to type so many brackets:
b = np.array([[1,2,3]]).T
3
Paul Panzer