numpy数组赋值

numpy数组赋值,numpy,python-2.7,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约定。主要区别在于 b = a[:,0]

从技术上讲,两者的区别是什么

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

作为NPE答案的旁注,在第一种情况下,
numpy.empty((100))
数组被丢弃,因为
b
不再指向它。