1.数组对象基础
ndarray是NumPy的核心功能,其含义是:n-dimensional array,即多维数组。在Python中万物皆对象,数组也是一个对象,数组是NumPy的一个重要数据结构。
2.初识数组对象
在Jupyter中查看NumPy的版本(按shift + enter即可运行代码)
import numpy as np
np.__version__
输出结果如下:
2.1 创建第一个数组
In [2]: data = np.array([1, 2, 3, 4, 5, 6])
In [3]: data
Out[3]: array([1, 2, 3, 4, 5, 6])
In [4]: type(data)
Out[4]: numpy.ndarray
小提示:此处可以使用dir(data)查看数组对象的属性和方法。如果使用data?可以打开数组的官方文档
2.2 数组元素的类型dtype
# dtype可以查看数组元素的类型
In [9]: data.dtype
Out[9]: dtype('int32')
从输出结果得出数组元素的类型为int32,即32位的整数。
数组元素类型的改变
In [18]: new_data = data.astype(np.float)
In [19]: new_data.dtype
Out[19]: dtype('float64')
In [20]: data, data.dtype
Out[20]: (array([1, 2, 3, 4, 5, 6]), dtype('int32'))
In [21]: new_data
Out[21]: array([1., 2., 3., 4., 5., 6.])
数组data相对于new_data只有数组元素类型不同
2.2 数组的外貌
(1)shape可以查看数组的形状
In [22]: data2 = np.array([1, 2, 3, 4])
In [23]: data2.shape
Out[23]: (4,)
返回结果表示是一维数组。
(2)ndim返回数组的维度
In [24]: data2.ndim
Out[24]: 1
(3) size返回数组元素的个数
In [25]: data2.size
Out[25]: 4
NumPy常用数组对象属性表
属性
说明
dtype
返回数组元素的类型
shape
返回由整数组成的元组,元组中的每个整数依次对应数组的每个轴的元素个数
size
返回一个整数,代表数组元素中的个数
ndim
返回一个整数,代表数组轴的个数,即维度
nbytes
返回一个整数,代表用于保存数组的字节数
小提示:可以通过help(data2.dtype)或者data2.dtype?查看帮助文档
3.数组的创建方法
3.1 基本方法
# 一维数组创建
In [31]: np.array([1, 2, 3, 4, 5], dtype=float)
Out[31]: array([1., 2., 3., 4., 5.])
# 多维数组创建
# 通过嵌套列表创建的数组就是多维数组
In [33]: np.array([[1, 2, 3],[10, 20, 30],[100, 200, 300]])
Out[33]:
array([[ 1, 2, 3],
[ 10, 20, 30],
[100, 200, 300]])
# 注意:嵌套列表的每个元素的长度与类型都必须一致
(3)指定维度创建
# ndmin指定最小维度数
In [39]: data3 = np.array([1, 2, 3, 4, 5, 6, 7, 8], ndmin=2)
In [40]: data3.shape
Out[40]: (1, 8)
3.2 用函数创建数组
In [41]: np.zeros((2,10))
Out[41]:
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])
此处的np.zeros()能够创建一个完全由0组成的数组,(2,10)是以元组形式声明该数组的形状
NumPy中创建特殊数组的函数
函数
说明
asarray
输入参数为列表、元组,或者由他们组成的嵌套对象或数组,返回一个数组。如果参数是数组,则返回该数组本身
arange
根据开始值、结束值和步长创建一个数组
ones、ones_like
ones根据指定的形状和元素类型,创建元素值为1的数组。ones_like创建一个与某指定数组完全一样但元素值是1的数组
zeros、zeros_like
与上述相同,只不过元素是0
empty、empty_like
与上述相同,只不过没有填充任何元素数据,但分配了内存空间
eye、identity
创建对角线元素是1、其他元素是0的二维数组
diag
创建对角线元素是指定值,其余元素是0的二维数组
linspace
根据开始值、结束值和元素数量创建元素是等差数列的数组
logspace
根据开始值、结束值和元素数量和对数底创建元素是等比数列的数组
3.3 创建自定义类型的数组
In [67]: my_type = np.dtype([('name',str, 20),('age',np.int8),('salary', np.float32)])
In [68]: items = np.array([('Jack',18,1000.00),('Lucy',19,2000.00)], dtype=my_type)
In [69]: print(items.dtype)
[('name', '
3.4 form系列的函数创建数组
创建9*9乘法结果表数组
In [74]: np.fromfunction(lambda i, j:(i+1)*(j+1), (9, 9), dtype=np.int)
Out[74]:
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9],
[ 2, 4, 6, 8, 10, 12, 14, 16, 18],
[ 3, 6, 9, 12, 15, 18, 21, 24, 27],
[ 4, 8, 12, 16, 20, 24, 28, 32, 36],
[ 5, 10, 15, 20, 25, 30, 35, 40, 45],
[ 6, 12, 18, 24, 30, 36, 42, 48, 54],
[ 7, 14, 21, 28, 35, 42, 49, 56, 63],
[ 8, 16, 24, 32, 40, 48, 56, 64, 72],
[ 9, 18, 27, 36, 45, 54, 63, 72, 81]])