36

私はPythonで作業しており、次のようなNumPy配列を使用しています。

[1,5,9]
[2,7,3]
[8,4,6]

次のようなものに伸ばすにはどうすればよいですか?

[1,1,5,5,9,9]
[1,1,5,5,9,9]
[2,2,7,7,3,3]
[2,2,7,7,3,3]
[8,8,4,4,6,6]
[8,8,4,4,6,6]

これらは単なる配列の例です。実際には、これらだけでなく、いくつかのサイズの配列のサイズを変更します。

私はこれが初めてで、自分がしなければならないことに頭を悩ませているようには見えません。

4

3 に答える 3

40

@KennyTMの答えは非常に洗練されており、実際にあなたのケースでうまくいきますが、配列を拡張するためのもう少し柔軟性を提供する可能性のある代替手段として試してくださいnp.repeat:

>>> a = np.array([[1, 5, 9],
              [2, 7, 3],
              [8, 4, 6]])

>>> np.repeat(a,2, axis=1)
array([[1, 1, 5, 5, 9, 9],
       [2, 2, 7, 7, 3, 3],
       [8, 8, 4, 4, 6, 6]])

したがって、これは1つの軸に沿って繰り返すことを実現し、複数の軸に沿って(必要に応じて)取得するには、np.repeat呼び出しをネストするだけです:

>>> np.repeat(np.repeat(a,2, axis=0), 2, axis=1)
array([[1, 1, 5, 5, 9, 9],
       [1, 1, 5, 5, 9, 9],
       [2, 2, 7, 7, 3, 3],
       [2, 2, 7, 7, 3, 3],
       [8, 8, 4, 4, 6, 6],
       [8, 8, 4, 4, 6, 6]])

また、最初の行または列の繰り返し回数を変えることもできます。たとえば、最後の行を除く各行を 2 回繰り返したい場合は、次のようにします。

>>> np.repeat(a, [2,2,1], axis=0)
array([[1, 5, 9],
       [1, 5, 9],
       [2, 7, 3],
       [2, 7, 3],
       [8, 4, 6]])

ここで、2 番目の引数が a のlist場合、行単位 (この場合は行axis=0) を指定し、行ごとに繰り返します。

于 2010-11-19T16:46:37.073 に答える
19
>>> a = numpy.array([[1,5,9],[2,7,3],[8,4,6]])
>>> numpy.kron(a, [[1,1],[1,1]])
array([[1, 1, 5, 5, 9, 9],
       [1, 1, 5, 5, 9, 9],
       [2, 2, 7, 7, 3, 3],
       [2, 2, 7, 7, 3, 3],
       [8, 8, 4, 4, 6, 6],
       [8, 8, 4, 4, 6, 6]])
于 2010-11-19T15:28:53.257 に答える
2

残念ながら、numpy では分数ステップを使用できません (私の知る限り)。これが回避策です。これは Kenny のソリューションほど賢くはありませんが、従来のインデックス作成を利用しています。

>>> a = numpy.array([[1,5,9],[2,7,3],[8,4,6]])
>>> step = .5
>>> xstop, ystop = a.shape
>>> x = numpy.arange(0,xstop,step).astype(int)
>>> y = numpy.arange(0,ystop,step).astype(int)
>>> mg = numpy.meshgrid(x,y)
>>> b = a[mg].T
>>> b
array([[1, 1, 5, 5, 9, 9],
       [1, 1, 5, 5, 9, 9],
       [2, 2, 7, 7, 3, 3],
       [2, 2, 7, 7, 3, 3],
       [8, 8, 4, 4, 6, 6],
       [8, 8, 4, 4, 6, 6]])

(dtlussier のソリューションの方が優れています)

于 2010-11-19T16:53:21.113 に答える