技术上有什么区别
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 one。
答案 0 :(得分: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,)