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 回答