数据分析:Numpy模块(一)

Numpy数值计算基础

一、创建数组对象

1.数组属性:

属性 说明
ndim 返回int,表示数组的维度,即数组的秩
shape 返回 tuple。表示数组的尺寸,对于 n 行 m 列的矩阵,形状为(n,m),维度为len(n,m)
size 返回 int。表示数组的元素总数,等于数组形状的乘积
dtype 返回 data-type。描述数组中元素的类型
itemsize 返回 int。表示数组的每个元素的大小(以字节为单位)。
# numpy的主要对象是同种元素的多位数组。
# 特点:这是一个所有元素都是一种类型、通过一个正整数元组索引的元素表格
# 使用C写的

import numpy as np

arr1 = np.array([1,2,3])
print(arr1)
# 轴和秩 均为数组的维度
# 秩
print(arr1.ndim)# :一维数组的秩为1,二维数组的秩为2

print(arr1.shape)# (3,) --此处数组的维度为1,3表示轴的长度

# 二维数组

arr2 = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
print(arr2.ndim) # 秩为2
print(len(arr2.shape))# 元组里表示的是轴的长度,元组的个数表示数组的维度

# 二 、常用属性
#1.ndim
# 2.shape

arr3 = np.array([1,2,3,4,5,6])
arr3.shape = (2,3)
print(arr3)

# (3)size 元素总和
print(arr3.size)
if len(arr3.shape) == 2:
    print('元素总个数:',arr3.shape[0]*arr3.shape[1])
elif len(arr3.shape) == 1:
    print('元素总个数:',arr3.shape[0])

#dtype
#一个用来描述数组中元素类型的对象,可以通过创造或指定python类型。
print(arr3.dtype)#int32
#itemsize
# 数组中每个元素的字节大小。
print(arr3.itemsize)#4个字节
#data---数组的内存地址,是数据存储在内存的缓冲区。
print(arr3.data)#
print(arr3[1])

2.数组创建(创建一维或多维数组)
numpy.array(object,dtype=None,copy=True,order=‘K’,subok=False,ndmin=0)

参数名称 说明
object 接收 array。表示想要创建的数组。无默认。
dtype 接收 data-type。表示数组所需的数据类型。如果未给定,则选择保存对象所需的最小类型。默认为 None。
ndmin 接收 int。指定生成数组应该具有的最小维数。默认为 None。

方法

import numpy as np

# 方法有:
# 1.array
# def array(p_object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
# eg:
a1 = np.array([1,2,3,4,])
a2 = np.array([[1,2],[3,4]])
print(a2)

# dtype   指定python类型

a4 = np.array([[1,2],[3,4]],dtype=np.float32)
print(a4)

#2.arange()函数创建一维数组
# 格式:arange(起,止,步长)
# 注意:[start, stop)
a5 = np.arange(0,1,0.1)
print(a5)#[ 0.   0.1  0.2  0.3  0.4  0.5  0.6  0.7  0.8  0.9]

a6 = np.arange(0,90,1.5)
print(a6)#[ 0.   1.5  3.   4.5  6.   7.5]
# 通常无法准确预估元素个数,所以我们一般使用linspace
#3.使用linspace()函数
# 格式:def linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None):
# 注意:[`start`, `stop`].
a7 = np.linspace(1,10,11)
print(a7)

# 4.logspace()---等比数例
# eg1:生成10^1~10^3之间的3个等比数值
a8 = np.logspace(1,3,3)
print(a8)#[   10.   100.  1000.]
#eg2:生成2^0~2^10,10
# 0 2 4 8 16 32 64....1024
a9 = np.logspace(0,10,11,base=2,dtype=np.int32)
print(a9)#[   1    2    4    8   16   32   64  128  256  512 1024]

#5.zeros/ones
# np.array([[0,0,0],[0,0,0]])
a10 = np.zeros((2,3))
print(a10)

a11 = np.ones((2,3))
print(a11)

#6.empty()
#该函数创建一个内容随机并且依赖于内存状态的数组。
a12 = np.empty((2,3))
print('a12:',a12)

# 7.eye()
# 生成N阶矩阵,对角线元素为1
a13 = np.eye(3)
print(a13)

#8.diag()函数
a14 = np.diag([1,2,3,4])
print(a14)

随机数

import numpy as np

# 生成随机数  元素值域[0,1) 括号内为随机数个数
r1 = np.random.random(10)
print(r1)

# (2)rand()
# np.random.rand(m,n,....)
# 说明:生成一个M x N x....维的数组,元素值域:[0,1)
r2 = np.random.rand(3,4)
print(r2)

# (3)randn()
r3 = np.random.randn(1000)# 生成1000个随机数
print(r3)   # 遵循大数定理

# (4)randint()
r4 = np.random.randint(10,20,size=(3,4))
print(r4)

# shuffle   洗牌   随机进行排序
np.random.shuffle(r4)
print(r4)

存储数据时首先需要定义数据类型

# 自定义一个类型用来存储班级学员列表数据:
# (1)名称 (32)
# (2)年龄
#  (3)性别
# (4)成绩
import numpy as np

df = np.dtype([('name',np.str_,32),('age',np.int16),('sex',np.str_,8),('score',np.float32)])

stu_arr = np.array([('张三',18,'男',98),('李四',20,'男',97)],dtype=df)
print(stu_arr)

数组元素的访问

import numpy as np

# 数组元素的访问是通过“索引”来完成的

a1 = np.arange(10)
print(a1)
print(a1[2:5])

# 修改
a1[0] = 100
print(a1)

# 二维数组
a2 = np.arange(1,13,1).reshape(3,4)
print(a2)
print(a2[0][-1]) # 通过多下标来访问
print(a2[1,1])  # 双下标放一起
print(a2[1:,2:]) # 第二行到最后,第3个到最后

展平数组

import numpy as np
#大型数组
big_arr = np.arange(10000).reshape(100,100)
print(big_arr)
#  禁用自动省略
np.set_printoptions(threshold=np.NAN)
# print(big_arr)

# 展平数组
# 1. ravel 函数
a2 = np.arange(10).reshape(2,5)
print(a2)
a3 = a2.ravel()
print(a3)
a3[0] = 100
print('a2:',a2)

# flatten 函数
# 说明:flatten函数默认为横向展平,纵向展平需要加"F"

a4 = a2.flatten()# [0 1 2 3 4 5 6 7 8 9]
print(a4)
a5 = a2.flatten("F") #[0 5 1 6 2 7 3 8 4 9]
print(a5)
a5[0] = 100
print(a2)

# ravel 和flatten的区别

# 功能上讲,这两个函数都是numpy内的函数 ,都能够实现将多位数组降为一维数组
# 区别在于返回的是拷贝(copy)还是返回的是视图(view)
# numpy.flatten()返回的是拷贝, 对于拷贝所做的修改不会更改原始数据
# numpy.ravel()返回的是视图,会影响到原始数据

组合函数和切割函数

组合

import numpy as np

# 1. 组合数组
# (1)hstack()和vstack()

# arr1 = np.arange(1,6,2)
# arr2 = np.arange(7,12,2)
# print(arr1,arr2)
# arr3 = np.hstack((arr1,arr2))
# print(arr3)
# arr4 = np.vstack((arr1,arr2))
# print(arr4)

# 注意: 如果两个数组元素个数不相等,横向组合hstack不受影响,纵向组合vstack将会报错
# 在stack函数中使用圆括号和方括号都可以
# (3)两个数组使用加号相加实际上是对应元素相加
# arr5 = arr1 + arr2
# print(arr5)



# (2) concatenate()
arr1 = np.array([[1,1],[2,2]])
arr2 = np.array([[3,3],[4,4]])
# 方法一:
# 横向
arr3 = np.hstack((arr1,arr2))
print(arr3)
# 纵向
arr4 = np.vstack((arr1,arr2))
print(arr4)

# 方法二:
# 横向 按列拼接
arr5 = np.concatenate((arr1,arr2),axis=1)
print(arr5)
# 纵向 按横拼接
arr6 = np.concatenate((arr1,arr2),axis=0)
print(arr6)

切割

import numpy as np

# 切割函数
# (1)hsplit() 和vsplit()
# 按列切割 纵切
arr1 = np.array([[1,1,3,3],[2,2,4,4]])
print('arr1:\n',arr1)
arr2_subarry = np.hsplit(arr1,2)
print(arr2_subarry)
# 按横切割 横切
arr3_subarry = np.vsplit(arr1,2)
print(arr3_subarry)

你可能感兴趣的:(数据分析:Numpy模块(一))