【Python数据分析】NumPy之数组对象基础

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', '<U20'), ('age', 'i1'), ('salary', '<f4')]

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]])
posted @ 2020-05-14 10:28  OLIVER_QIN  阅读(1117)  评论(0编辑  收藏  举报