2016-08-24 8 views
0

同じオブジェクトにリンクせずにリストをコピーする場合は、リストを呼び出す必要があります。だから、私はnumpyの配列に事前にnumpyを使用しているときのリストと同等のものは何ですか?

import numpy 
a = numpy.ones(4) 

b = XXX(a)? 

おかげ

+6

b = a.copy() 
[ndarray.copy()](http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.copy.html) ? – Divakar

+1

Python 3では、 'list'オブジェクトにも' copy'メソッドがあります。これは、意図を明確にするために他のすべてのメソッドよりも優れていると思います。 –

答えて

3

copy -methodを使用:

-1

を持っているときあなたはただ、実際に(配列またはリストをコピーする[:]パターンを使用することができます同等だろう何

a = [1, 2, 3] 
b = list(a) 

a == b 
True 

a is b 
False 

リストではなく、配列ではありません。

a = np.ones(4) 
b = a[:] 

>>> b 
array([ 1., 1., 1., 1.]) 

>>> id(a) 
4606143744 

>>> id(b) 
4606143984 

タイミング

a = np.random.randn(1000000) 

%timeit -n 1000 a.copy() 
1000 loops, best of 3: 1.1 ms per loop 

%timeit -n 1000 a[:] 
1000 loops, best of 3: 659 ns per loop 

更新

私は通常、このような誤った投稿を削除だろうが、私はそれが有益であると考えているので、私はそれを残しています。

リストの期待どおりに動作します。 @ Divakarで指摘したように

a = [1, 2, 3] 
b = a[:] 
b[2] = 0 

>>> a 
[1, 2, 3] 

>>> b 
[1, 2, 0] 

しかし、これはnumpyのアレイのために働くためには表示されません。

a = np.array([1, 2, 3]) 
b = a[:] 
b[2] = 0 

>>> a 
array([1, 2, 0]) 

>>> b 
array([1, 2, 0]) 

>>> id(a) 
4600986400 

>>> id(b) 
4606142624 

ベストを明示的にcopy()方法(例えばb = a.copy())を使用します。

+0

また、動作するようです。しかし、これはリストについて使用されたときに否定されていませんか?なぜ覚えがないの?私はどこかでリストを使って読むのが良いです...とにかく。どうもありがとう。 –

+0

'a [:: 1]'は 'np.may_share_memory(a [:: 1]、a)'のような 'a'のビューは' True'を返しますか? – Divakar

+0

"Trueが返されても、必ずしも2つの配列が要素を共有しているわけではありません。しかし、実際には正しいかもしれないと思われます... – Alexander

関連する問題