1

どちらかの端に 1 がある、2 の配列を定義しています。MATLAB では、これは次の方法で達成できます。

x = [1 2*ones(1,3) 1]

ただし、Python では、numpy はまったく異なるものを提供します。

import numpy
numpy.array([[1],2*numpy.ones(3),[1]])

この MATLAB コマンドを Python で実行する最も効率的な方法は何ですか?

4

2 に答える 2

7
In [33]: import numpy as np

In [34]: np.r_[1, 2*np.ones(3), 1]
Out[34]: array([ 1.,  2.,  2.,  2.,  1.])

または、次を使用できますhstack

In [42]: np.hstack(([1], 2*np.ones(3), [1]))
Out[42]: array([ 1.,  2.,  2.,  2.,  1.])

In [45]: %timeit np.r_[1, 2*np.ones(300), 1]
10000 loops, best of 3: 27.5 us per loop

In [46]: %timeit np.hstack(([1], 2*np.ones(300), [1]))
10000 loops, best of 3: 26.4 us per loop

In [48]: %timeit np.append([1],np.append(2*np.ones(300)[:],[1]))
10000 loops, best of 3: 28.2 us per loop

最初から適切なサイズの配列を事前に割り当てると、小さい配列を追加しr_たり、使用したり、またはそれに追加したりするよりもはるかに高速になる可能性があることを指摘してくれた DSM に感謝します。hstack

In [49]: %timeit a = 2*np.ones(300+2); a[0] = 1; a[-1] = 1
100000 loops, best of 3: 6.79 us per loop

In [50]: %timeit a = np.empty(300+2); a.fill(2); a[0] = 1; a[-1] = 1
1000000 loops, best of 3: 1.73 us per loop
于 2013-02-02T15:03:58.787 に答える
0

1 だけの代わりに numpy.ones を使用します。

numpy.array([[1],2*numpy.ones(3),[1]])
于 2013-02-02T14:57:46.440 に答える