从技术上讲有什么区别
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 的约定。
从技术上讲有什么区别
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 的约定。
主要区别在于
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,)