一、生成ndarray

array函数。array函数可以接受任意的序列型对象,生成一个新的包含传递数据的Numpy数组。

data1 = [6, 7.5, 8, 0, -1 ]
arr1 = np.array(data1)

        嵌套序列,例如同等长度的列表,将会自动转化成多维数组。

data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)

ndim和shape属性来检查数组的维度。(其中ndim是求数组的维度,shape返回的是数组的形状)

dtype中。

        其中需要注意的是:                                                                                                                          int32 -> float64 是完全可以的。                                                                                                          float64 -> int32 会将小数部分截断。                                                                                                  string -> float64 如果字符串数组表示的全是数字,也可以转化。

以下都是数组生成函数:

        array : 将输入数据(可以是列表,元祖,数组以及其他序列)转化为ndarray,如果不显式指定数据类型,将自动推断;默认复制所有的输入数据。

        asarray: 将输入转化为ndarray,但如果输入已经是ndarray则不再复制。

        np.arange: Python内建函数range的数组版,返回一个数组。

        ones: 根据给定的形状和数据类型生成全1数组。

        ones_like: 根据所给定的数组生成一个形状完全一样的全1数组。

        zeros: 根据所给定形状和数据类型生成一个形状一样的全0数组。

        zeros_like: 根据所给定的数组生成一个形状完全一样的全0数组。

        empty: 根据给定形状生成一个没有初始化数值的空数组。

        empty_like: 根据所给定的数组生成一个形状完全一样但没有初始化的空数组。

        full: 根据所给定的形状和数据类型生成指定数值的数组。

        full_like: 根据所给的数组生成一个形状一样但内容是指定数值的数组。

        eye, identity: 生成一个N*N特征矩阵(对角线位置都是1,其余位置都是0)

二、ndarray 的数据类型

Numpy数据类型

类型

类型代码

描述

int8, uint8

i1, u1

有符号和无符号的8位整数

int16, uint16

i2, u2

有符号和无符号的16位整数

int32, uing32

i4, u4

有符号和无符号的32位整数

int64, uint64

i8, u8

有符号和无符号的64位整数

float16

f2

半精度浮点数

float32

f4或f

标准单精度浮点数;兼容C语言float

float64

f8或d

标准双精度浮点数;兼容C语言double和Python float

float128

f16或g

拓展精度浮点数

complex64

c8,

基于32位浮点数的复数

complex128

c16

基于64位浮点数的复数

complex256

c32

基于128位浮点数的复数

bool

?

布尔值,存储True或False

object

O

Python object类型

string_

S

修正的ASC II 字符串类型,例如生成一个长度为10的字符串类型,使用“S10”

unicode_

U

修正的Unicode类型,生成一个长度为10的Unicode类型使用“U10"

astype方法显式地转化数组的数据类型:

arr = np.array([1, 2, 3, 4, 5])
float_arr = arr.astype(np.float64)

三、Numpy 数组算术

        数组之所以重要是因为它批量操作而无须任何for循环。Numpy用户称这种特征为向量化。任何在两个等尺寸数组之间的算术操作都应用了逐元素操作的方式。带有标量(零维张量)计算的算术操作,会把计算参数传递给数组的每一个元素。同尺寸数组之间的比较,会产生一个布尔值数组。

实例代码:

获取ndarray的索引 想要得到ndarray的维度_获取ndarray的索引

 四、基础索引与切片

如果你还是想要一份数组切片的拷贝而不是一份视图的话,你就必须显式地复制这个数组,例如arr[5:8].copy().

arr = np.arange(10)
#arr ->array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
#arr[5:8]为array([5, 6, 7])
#b = 5
arr[5:8] = 12
#此时arr为array([0, 1, 2, 3, 4, 12, 12, 12, 8, 9])

        在二维的数组,每个索引值对应的元素不再是一个值,而是一个一维数组,因此,单个元素可以通过递归的方式获得。

arr2d = np.array ([1, 2, 3], [4, 5, 6], [7, 8, 9])
#arr2d[2]为array([7, 8, 9])

        在多维数组中,你可以省略后续索引值,返回的对象将是降低一个维度的数组。

arr3d = np.array([[[1, 2, 3],[4, 5, 6]],[[7, 8, 9], [10, 11, 12]]])
#arr3d[0]为 array([[1, 2, 3], [4, 5, 6]])

        切片操作与Python列表类似:

五、布尔索引

        使用numpy/.random.randn()函数来生成一些随机正太分布的数据:

   

获取ndarray的索引 想要得到ndarray的维度_numpy_02

         布尔值数组的长度必须和数组轴索引长度一致。使用布尔值索引选择数据是,总是生成数据的拷贝,即使返回的数组没有并没有任何变化。python的关键字 and 和 or 对布尔值数组并没有用,使用& |来代替。

六、神奇索引

        用于描述使用整数数组进行数据索引。神奇索引与切片不同,它总是将数据复制到一个新的数组中。

arr = np.empty((8, 4))
for i in range(8):
    arr[i] = i

#arr为array([[0., 0., 0., 0.],
#            [1., 1., 1., 1.],
#            [2., 2., 2., 2.].
#            [3., 3., 3., 3.],
#            [4., 4., 4., 4.],
#            [5., 5., 5., 5.],
#            [6., 6., 6., 6.],
#            [7., 7., 7., 7.]])
arr1 = arr[[4, 3, 0, 6]] 
#arr1为array([[4., 4., 4., 4.],
#             [3., 3., 3., 3.],
#             [0., 0., 0., 0.],
#             [6., 6., 6., 6.]])
#如果使用负的索引将从尾部进行选择

七、数组转置和换轴

T属性可以转置数组。

arr = np.arange(15).reshape((3, 5))
arr.T

矩阵计算时,你可能会经常进行一些特定操作,内积.dot;

arr = np.random.randn(6, 3)
np.dot(arr.T, arr)

对于更高维的数组,transpose方法可以接收包含轴编号的元组,用于置换轴

获取ndarray的索引 想要得到ndarray的维度_数组_03

        在这里,轴已经被重新排序,使得原先的第二个轴变为第一个,原先的第一个轴变成了第二个,最后一个轴并没有改变。

        .T进行转置是换轴的一个特殊案例。ndarray有一个swapaxes方法,改方法接收一对轴编号作为参数,并对轴进行调整用于重组数据。swapaxes返回的是数据的视图,而没有对数据进行复制。

获取ndarray的索引 想要得到ndarray的维度_python_04