1.ndarray对象的内部机理

NumPy的ndarray提供了一种将同质化数据块解释为多维数组对象的方式,ndarray如此强大的部分原因是所有数组对象都是数据块的一个跨度视图。

ndarray内部由以下内容组成:

a.一个指向数组(一个系统内存块)的指针

b.数据类型或dtype

c.一个表示数组形状的元组;例如,一个10*5的数组,其形状为(10,5)

d.一个跨度元组,其中的整数指的是为了前进到当前维度下一个元素需要“跨度”的字节数;如,一个3*4*5的float(8个字节)数组,其跨度为(160,40,8)

2.NumPy数据类型体系

NumPy数据类型体系

3.gao级重塑

假设有一个一维数组,我们希望将其重新排列为一个矩阵

*重塑

多维数组同样也能被重塑。

4.C和Fortran顺序

默认情况下,NumPy数组是按行优先顺序创建的。在空间方面,意味着,对于一个二维数组,每行中的数据项是被存放在相邻内存位置上的。另一种顺序是列优先顺序,意味着每列中的数据项是被存放在相邻内存位置上的。

由于一些历史原因,行和列优先顺序又分别称为C和Fortran顺序。

C和Fortran顺序

二维或更高数组的重溯过程比较令人费解。C和Fortran顺序的关键区别就是维度的行进顺序:

a.C/行优先顺序:先经过更高的维度(如,轴1会优先于轴0被处理)

b.Fortran/列优先顺序:后经过更高的维度(如,轴0会优先于轴1被处理)

5.数组的合并和拆分

numpy.concatenate可以按指定轴将一个由数组组成的列连接到一起;对于常见的连接操作,NumPy提供了一些比较方便的方法(如vstack和hstack)。因此,上面的运算还可以表达为:

print np.vstack((arr5,arr6))

print np.hstack((arr5,arr6))

结果为:

[[ 1 2 3]

[ 4 5 6]

[ 7 8 9]

[10 11 12]]

[[ 1 2 3 7 8 9]

[ 4 5 6 10 11 12]]

与此相反,split用于将一个数组沿指定轴拆分为多个数组。

5.堆叠辅助类:r_和c_

NumPy命名空间中有两个特殊的对象:r_和c_,他们可以是数组的堆叠操作变的简洁

.数组的合并和拆分

6.元素的重复操作:tile和repeat

repeat会将数组中的各个元素重复一定次数,从而产生一个更大的数组;默认情况下,如果传入的是一个整数,则各元素就都会重复那么多次。如果传入的是一组整数,则各元素就可以重复不同的次数;对于多维数组,还可以让它们的元素沿指定轴重复;如果没有设置轴向,则数组会被扁平化。同样,在对多维进行重复时,也可以传入一组整数,这样就会使各切片重复不同的次数

print arr12.repeat([2,3],axis=0)

print arr12.repeat([2,3],axis=1)

结果为:

[[-0.77124211 0.05274718]

[-0.77124211 0.05274718]

[-0.77421856 0.66942701]

[-0.77421856 0.66942701]

[-0.77421856 0.66942701]]

[[-0.77124211 -0.77124211 0.05274718 0.05274718 0.05274718]

[-0.77421856 -0.77421856 0.66942701 0.66942701 0.66942701]]

tile的功能是沿指定轴向堆叠数组的副本。你可以形象地将其想象成“铺瓷砖”;第二个参数是瓷砖的数量。对于标量,瓷砖是水平铺设的,而不是垂直铺设。它可以是一个表示“铺设”布局的元组。