1

技術的に違いは何ですか

import numpy as np
a = np.random.random((100,3))
b = numpy.empty((100))

# what the difference between
b = a[:,0]
# and
b[:] = a[:,0]

Fortran でコンパイルされた関数で b を読み取り、b のスライスがすべての違いを生んでいることを私が尋ねている理由。これは、C と fortran の間の列と行の読み方に関係があります。デフォルトのnumpy規約はCのものです。

4

1 に答える 1

3

主な違いは、

b = a[:,0]

aのデータにビューを作成しますが、

b[:] = a[:,0]

データのコピーを作成します。

前者は と同じメモリ レイアウトを使用しますaが、後者は元の のメモリ レイアウトを保持しますb。特に、後者の場合、すべてのデータが連続したメモリ位置に圧縮されることを意味します。

In [29]: b = numpy.empty((100))

In [30]: b = a[:,0]

In [31]: b.strides
Out[31]: (24,)



In [32]: b = numpy.empty((100))

In [33]: b[:] = a[:,0]

In [34]: b.strides
Out[34]: (8,)
于 2013-03-02T21:05:31.870 に答える