numpy数组赋值

时间:2013-03-02 21:03:54

标签: numpy python-2.7

技术上有什么区别

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。

1 个答案:

答案 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,)