84

ある種の水平連結のようですが、オンラインでドキュメントを見つけることができませんでした。ここに最小限の作業例があります:

In [1]: from numpy import c_
In [2]: a = ones(4)
In [3]: b = zeros((4,10))    
In [4]: c_[a,b]
Out[4]: 
array([[ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])
4

8 に答える 8

70

IPythonの?構文を使用して、詳細情報を取得します。

In [2]: c_?
Type:       CClass
Base Class: <class 'numpy.lib.index_tricks.CClass'>
String Form:<numpy.lib.index_tricks.CClass object at 0x9a848cc>
Namespace:  Interactive
Length:     0
File:       /usr/lib/python2.7/dist-packages/numpy/lib/index_tricks.py
Docstring:
Translates slice objects to concatenation along the second axis.

This is short-hand for ``np.r_['-1,2,0', index expression]``, which is
useful because of its common occurrence. In particular, arrays will be
stacked along their last axis after being upgraded to at least 2-D with
1's post-pended to the shape (column vectors made out of 1-D arrays).

For detailed documentation, see `r_`.

Examples
--------
>>> np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])]
array([[1, 2, 3, 0, 0, 4, 5, 6]])
于 2012-06-08T12:17:06.527 に答える
62

理解するのにかなり時間がかかりましたが、ようやく理解できたようです。

必要なのは、2 番目の軸に沿って追加することだけです。

取りましょう:

np.c_[np.array([1,2,3]), np.array([4,5,6])]

しかし、2番目の軸はありません。したがって、精神的に1つ追加します。

なので両方の配列の形状は になり(3,1)ます。

したがって、結果の形状は (3,1+1)、つまり (3,2) になります。これは結果の形状です -

array([[1, 4],
       [2, 5],
       [3, 6]])

別の例:

np.c_[np.array([[1,2,3]]), 0, 0, np.array([[4,5,6]])]

形状:

np.array([[1,2,3]])=1,3

np.array([[4,5,6]])=1,3

0だから私たちはそれを次のように考えることができます[[0]]=1,1

したがって、結果1,3+1+1+3=1,8

これは結果の形です:array([[1, 2, 3, 0, 0, 4, 5, 6]])

于 2018-08-16T19:37:29.467 に答える
8

複数の 1D 配列を 2D 配列に変換し、元の配列の 1 次元を 2D 配列の 1 次元として保持します。複数の入力配列が 2 次元として使用されます。

次のように考えてみてください。それぞれ 30 レコードのデータ シリーズが別々の 1D 配列に収集されているnp.c_場合、これらのシリーズを Excel テーブルの場合と同様に結合します。つまり、最初のシリーズを拡張するのではなく、30 の別々の列に並べて並べます。

たとえば、2 つの開始配列:

>>> arrayX = np.array([X1,X2...,X30])
array([X1, X2..., X30])
>>> arrayY = np.array([Y1,Y2...,Y30])
array([Y1, Y2..., Y30])

np.c_それらを組み合わせる方法を見てみましょう。

>>>arrayC = np.c_(arrayX, arrayY)
array([[X1, Y1],
       [X2, Y2],
       ...
       [X30, Y30]])

まだ 30 レコードの長さであることがわかりますか? 2 次元を使用して、データ系列間を移動できるようになりました。

ドキュメントには、「スライス オブジェクトを 2 番目の軸に沿った連結に変換する」とやや不可解に記載されています。何の第二軸?結果の2D配列、彼らは意味します。np.r_これが、最初の軸に沿って連結する のバリエーションであることを知らない場合は不明です。また、1D配列が別の次元を持つと考えていない場合。しかし、構文的には、ちょっとそうです。

これを説明するために、配列の形状をクエリします。

>>> np.shape(arrayX)
(30,)
>>> np.shape(arrayY)
(30,)
>>> np.shape(arrayC)
(30,2)

メソッドによって 2 番目の次元または軸が作成され、np.c_そこで連結が行われていることがわかります。対照的に:

>>> arrayR = np.r_[array1,array2]
array([X1, X2..., X30, Y1, Y2..., Y30])
>>> np.shape(arrayR)
(60,)

このnp.r_メソッドは、最初の次元内または最初の軸に沿って連結します。

于 2019-10-21T23:11:58.320 に答える
4

Actually it is not a function, it is an object of class CClass.

it is "not a function, so takes no parameters

Above is what the official document said. you can check this question for details.

numpy.r_ is not a function. What is it?

于 2013-11-20T20:12:08.663 に答える