目录
一、Numpy概述
二、ndarray数组创建
三、数组的索引和切片使用
四、数组形状的转换
五、常用的统计方法
六、数组的去重
七、数组的拆分与合并
八、其他说明
numpy(Numerical Python)提供了python对多维数组对象的支持:ndarray,具有矢量运算能力,快速、节省空间。numpy支持高级大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
ndarry:N维数组,元素数据类型必须相同。
其属性如下:
属性 | 功能 |
dtype | 数组元素的类型 |
ndim | 数组的维度 |
shape | 数组的长度 |
下面是一些创建数组以及打印其属性的函数使用:
# -*- coding: utf-8 -*-
import numpy;
print '使用列表生成一维数组'
data = [1,2,3,4,5,6]
x = numpy.array(data)
print x #打印数组
print x.dtype #打印数组元素的类型
print '使用列表生成二维数组'
data = [[1,2],[3,4],[5,6]]
x = numpy.array(data)
print x #打印数组
print x.ndim #打印数组的维度
print x.shape #打印数组各个维度的长度。shape是一个元组
print '使用zero/ones/empty创建数组:根据shape来创建'
x = numpy.zeros(6) #创建一维长度为6的,元素都是0一维数组
print x
x = numpy.zeros((2,3)) #创建一维长度为2,二维长度为3的二维0数组
print x
x = numpy.ones((2,3)) #创建一维长度为2,二维长度为3的二维1数组
print x
x = numpy.empty((3,3)) #创建一维长度为2,二维长度为3,未初始化的二维数组
print x
print '使用arrange生成连续元素'
print numpy.arange(6) # [0,1,2,3,4,5,] 开区间
print numpy.arange(0,6,2) # [0, 2,4]
一维数组的使用与Python的列表索引基本相似。
二维数组的使用如下:
import numpy as np
if __name__ == '__main__':
np2arr = np.arange(24).reshape(4, 6)
print(np2arr)
#取值 np2arr[行,列]
#取行
print(np2arr[0,]) # 取第一行
print(np2arr[1, :])
#取列
print(np2arr[:, 0]) #取第一列
#取多行
print(np2arr[[1, 2, 3],]) #
# 取多列
print(np2arr[1, [1, 2, 3]])
#
print(np2arr[1:3,1:4]) #取的是 矩阵的范围
print(np2arr[[1,2,3], [1,2,3]]) #[ 7 14 21] 取多个值
import numpy as np
if __name__ == '__main__':
np_arr = np.array([[1, 2, 3], [4, 5, 6]])
print(np_arr)
# sharp
print(np_arr.shape)
#1.修改 sharp
'''
size = sharp[0] * sharp[1]
'''
np_arr.shape = (3,2)
print("--"*20)
print(np_arr)
print(np_arr.shape)
# 2.修改 sharp
np_arr2 = np.reshape(np_arr, (1, 6), order='C')
np_arr3 = np.reshape(np_arr, (1, 6), order='F')
np_arr4 = np.reshape(np_arr, (1, 6), order='A')
print(np_arr2)
print("--" * 20)
print(np_arr)
print("--" * 20)
print(np_arr3)
print("--" * 20)
print(np_arr4)
print("**" * 20)
# 3.修改 sharp
print(np_arr)
print("**" * 20)
np_arr5 = np_arr.reshape((1, 6))
print(np_arr5)
print("**" * 20)
print(np_arr)
print("**" * 20)
# 4.修改 数组维度
print(np_arr)
print("**" * 20)
#2 -》 3 6
np3_arr = np.reshape(np_arr, (2, 3, 1))
print(np3_arr)
print("**" * 20)
# 2 ->1
np2_arr = np.reshape(np_arr, (1, 6))
print(np2_arr)
print(np2_arr.ndim)
print("**" * 20)
np1_arr = np.reshape(np_arr, (6,))
print(np1_arr)
print(np1_arr.ndim)
方法 | 说明 |
sum | 对数组的全部或某轴向进行求和。 |
mean | 算数平均数,零长度的数组的mean为NAN。 |
min | 最小值 |
max | 最大值 |
std | 标准差 |
var | 方差 |
import numpy as np
if __name__ == '__main__':
data = np.random.randint(1, 9, 20).reshape(4,5)
print(data)
#
# #1. rand (0,1)均匀分布
# d1 = np.random.rand(10)
# print(d1)
#
# #2 正态分布
# d2 = np.random.randn(100)
# print(d2)
#
# #3.choice
# d3 = np.array([1, 2, 3, 4])
# d4 = np.random.choice(d3, (4, 4), p=[0.1, 0, 0.6, 0.3])
# print(d4)
#基本的函数
print(np.sum(data))
print(np.mean(data))
print(np.min(data))
print(np.max(data))
# 方差 标准差
data2 = np.array([8,2, 3,4,7,6])
print(data2.var())
print(data2.std())
print(np.var(data2))
print(np.std(data2))
#有偏估计 无偏估计 【数量少】
print(np.var(data2,ddof=1))
print(np.std(data2,ddof=1))
print 'ndarray的唯一化'
x = numpy.array([[1,4,2],[6,1,3],[1,5,2]])
print numpy.unique(x) # [1,2,3,4,5,6]
方法 | 说明 |
concatenate | 沿着一条轴进行连接 |
vstack | 面向行的方式对数组进行堆叠 |
hstack | 面向列的方式对数组进行堆叠 |
split | 通过定义axis的值为1或0,进行按行或按列进行分割 |
vsplit | 面向行的方式对数组进行分割 |
hsplit | 面向列的方式对数组进行分割 |
组合的使用:
x = numpy.array([[1, 2, 3], [4, 5, 6]])
y = numpy.array([[2,4,6], [8, 10, 12]])
print numpy.concatenate([x, y], axis = 0)
# 纵向组合 [[ 1 2 3][ 4 5 6][ 2 4 6][8 10 12]]
print numpy.concatenate([x, y], axis = 1)
# 横向组合 [[ 1 2 3 2 4 6][ 4 5 6 8 10 12]]
print numpy.vstack((x, y)) # 垂直堆叠:相对于垂直组合
print numpy.hstack((x, y)) # 水平堆叠:相对于水平组合
合并与分割
x = numpy.array([[1, 2, 3], [4, 5, 6]])
print numpy.split(x,2,axis=0)
# 按行分割2次 [array([[1, 2, 3]]), array([[4, 5, 6]])]
print numpy.split(x,3,axis=1)
# 按列分割3次 [array([[1],[4]]), array([[2],[5]]), array([[3],[6]])]
本篇文章为初学,如有问题可以提出,请您指正,谢谢观看。