欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

01-numpy数组的使用

程序员文章站 2022-03-09 20:30:38
...

Numpy本身并没有提供那么多高级的数据分析功能,理解Numpy数组以及面向数组的计算将有助于我们更加高效的使用pandas之类的工具。
Numpy最重要的一个特点就是其N纬数组对象(即ndarray),该对象是一个快速而灵活的大数据集容器。我们可以利用这种数组对整块的数据执行一些数学运算。

1.创建ndarray数组

a.array函数创建数组
import numpy as np
array_a = np.array([1, 2, 3, 4])
array_a
--------------------------------
array([1, 2, 3, 4])
b.arange创建数组
array_b = np.arange(1, 10, 2)
array_b
--------------------------------
array([1, 3, 5, 7, 9])
c.特殊函数创建数组
# 全0矩阵
np.zeros(5)
--------------------------------
array([0., 0., 0., 0., 0.])
# 单位矩阵
np.eye(5)
--------------------------------
array([[1., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0.],
       [0., 0., 1., 0., 0.],
       [0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 1.]])
# 创建空数组
np.empty(5)
--------------------------------
array([3.99179239e+252, 5.73839929e+180, 2.64521041e+185, 3.32234062e+257,
       1.23701654e-259])

2.数据类型

使用astype函数转换数组类型
# 将字符串类型的数据,转换成整数型
arr_1= np.array(['10', '20', '30', '40'])
arr_1.astype(np.int32)
--------------------------------
array([10, 20, 30, 40])
常见数据类型
类型 类型代码 说明
int8、uint8 i1、u1 有符号和无符号的8位(1个字节长度)整型
int16、uint16 i2、u2 有符号和无符号的16位(2个字节长度)整型
int32、uint32 i4、u4 符号和无符号的32位(4个字节长度)整型
float16 f2 半精度浮点数
float32 f4或f 标准单精度浮点数
float64 f8或d 双精度浮点数
bool ? 布尔类型
object O Python对象类型
unicode_ U 固定长度的unicode类型,跟字符串定义方式一样

3.数组运算

import numpy as np
ndarray1 = np.array([1, 2, 3, 4, 5])
ndarray2 = np.array([6, 7, 8, 9, 10])

# 数组和数组之间的运算
ndarray3 = ndarray1 * ndarray2
ndarray3
--------------------------------
array([ 6, 14, 24, 36, 50])

ndarray4 = ndarray1 + ndarray2
ndarray4 
--------------------------------
array([ 7,  9, 11, 13, 15])

# 数组和数字值之间的运算
ndarray5 = ndarray1 + 100
ndarray5 
--------------------------------
array([101, 102, 103, 104, 105])

ndarray6 = 15 / ndarray1
ndarray6 
--------------------------------
array([15.  ,  7.5 ,  5.  ,  3.75,  3.  ])

# 多维数组和多维数组之间的运算
ndarray7 = np.arange(9).reshape((3, 3))
ndarray8 = np.arange(9).reshape((3, 3))
ndarray7 + ndarray8 
--------------------------------
array([[ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])

# 一维数组和多维数组之间运算
ndarray10 = np.arange(3)
ndarray11 = np.arange(6).reshape((2, 3))
ndarray10 + ndarray11
--------------------------------
array([[0, 2, 4],
       [3, 5, 7]])

4.索引和切片

import numpy as np
arr_1 = np.arange(20).reshape((4, 5))
arr_1
--------------------------------
array([[ 0,  1,  2,  3,  4],
       [ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14],
       [15, 16, 17, 18, 19]])

arr_1[1:3]
--------------------------------
array([[ 5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14]])
# 获取特定值
arr_1[1:3][0][1:3]
--------------------------------
array([6, 7])
np.where用法
# 已知有两个数组: ndarray1 = np.array(["a", "b", "c", "d", "t"]) 
ndarray2 = np.array(["c", "s", "r", "c", "e"]) 对比数组中对应位置的值,取出大的值,组成新的数组.
# 使用格式为: result = np.where(条件, 值1, 值2)
result = np.where(ndarray1 > ndarray2, ndarray1, ndarray2)
result 
--------------------------------
array(['c', 's', 'r', 'd', 't'], dtype='<U1')

5.数组函数

arr_2 = np.arange(5)
arr_2
--------------------------------
array([0, 1, 2, 3, 4])
# 求平方根
np.square(arr_2)
--------------------------------
array([ 0,  1,  4,  9, 16], dtype=int32)

# 四舍五入到最近的整数
arr_3 = np.array([1.3, 1.7, 0.4, 6.8])
np.rint(arr_3)
--------------------------------
array([1., 2., 0., 7.])
通用函数
  • 一元
函数 说明
abs 计算整数、浮点数的绝对值。
aqrt 计算各元素的平方根。相当于arr ** 0.5
square 计算各元素的平方。相当于arr ** 2
sign 计算各元素的正负号,1(正数)、0(零)、-1(负数)
ceil 计算各元素的celling值,即大于该值的最小整数。
floor 计算各元素的floor值,即小于等于该值的最大整数。
rint 将各元素值四舍五入到最近的整数,保留dtype
modf 将数组的小数和整数部分以两个独立数组的形式返回
isnan 返回一个表示“那些是NaN(这不是一个数字)”的布尔类型数组.
  • 二元
函数 说明
add 将数组中对应的元素相加.
subtract 从第一个数组中减去第二个数组中的元素.
multiply 数组元素相乘
divide、floor_divide 除法、向下整除法(丢弃余数)
power 对第一个数组中的元素A,根据第二数组中的相应元素B,计算A的B次方。
maximum、fmax 元素级的最大值计算。fmax将忽略NaN
minimum、fmin 元素级的最小值计算。fmin将忽略NaN
mod 元素级的求模计算.
copysign 将第二个数组中的值的符号复制给第一个数组中的值.
greater、greater_equal 执行元素级的运算比较,最终产生布尔类型数组。
数组统计函数
方法 说明
mean 算数平均数。零长度的数组的mean为NaN.
sum 所有元素的和.
max、min 所有元素的最大值,所有元素的最小值
std、var 所有元素的标准差,所有元素的方差
argmax、argmin 最大值的下标索引值,最小值的下标索引值
cumsum、cumprod 所有元素的累计和、所有元素的累计积
all和any函数
# 判断两个数组元素是否相等
ndarray1 = np.arange(6).reshape((2, 3))
ndarray2 = np.arange(6).reshape((2, 3))
ndarray3 = np.array([[ 0,  1,  2], [ 8,  9, 10]])
(ndarray1 == ndarray2).all()
--------------------------------
True
(ndarray1 == ndarray3).all()
--------------------------------
False
(ndarray1 == ndarray3).any()
--------------------------------
True
添加和删除函数
方法 说明
delete 返回沿轴删除子数组的新数组
insert(arr, obj, values[, axis]) 沿给定轴插入值
append(arr, values[, axis]) 将值追加到数组的末尾
resize(a, new_shape) 返回具有指定形状的新数组
concatenate((a1,a2,...), axis=0) 沿现有轴连接数组序列
唯一化和集合函数
方法 说明
unique(x) 计算x中的唯一元素,并返回有序结果
intersect1d(x, y) 计算x和y中的公共元素,并返回有序结果
union1d(x, y) 计算x和y的并集,并返回有序结果
in1d(x, y) 得到一个表示“x的元素是否包含于y”的布尔型数组
setdiff1d(x, y) 集合的差,即元素在x中且不再y中
随机数生成函数
方法 说明
permutation 如果给的数字,则生成指定个数随机数 ,如果是数组,则打乱数组返回
shuffle 打乱一个序列的原有顺序
randint 从给定的上下限随机选取整数
数组排序函数
  • 一维数组排序
import numpy as np
ndarray1 = np.random.randint(1, 10, (1, 5))
ndarray1.sort()
ndarray1
--------------------------------
array([[1, 2, 2, 5, 8]])
  • 二维数组排序
ndarray2 = np.random.randint(1, 10, (5, 5))
ndarray2
--------------------------------
array([[3, 8, 7, 9, 3],
       [8, 7, 1, 9, 1],
       [2, 6, 8, 1, 2],
       [4, 2, 6, 6, 1],
       [3, 5, 3, 5, 4]])
# 对每行数据进行排序
ndarray2.sort()  
ndarray2
--------------------------------
array([[3, 3, 7, 8, 9],
       [1, 1, 7, 8, 9],
       [1, 2, 2, 6, 8],
       [1, 2, 4, 6, 6],
       [3, 3, 4, 5, 5]])
# 对每列数据进行排序
ndarray2.sort(axis=0)  
ndarray2
--------------------------------
array([[1, 1, 2, 5, 5],
       [1, 2, 4, 6, 6],
       [1, 2, 4, 6, 8],
       [3, 3, 7, 8, 9],
       [3, 3, 7, 8, 9]])

6.数组文件读写

import numpy as np
ndarray1 = np.array([
    ['aaa', 'bbb', 'ccc', 'ddd', 'eee'],
    ['fff', 'ggg', 'hhh', 'iii', 'jjj'],
    ['aaa', 'bbb', 'ccc', 'ddd', 'eee'],
    ['fff', 'ggg', 'hhh', 'iii', 'jjj']
])
ndarray1
--------------------------------
array([['aaa', 'bbb', 'ccc', 'ddd', 'eee'],
       ['fff', 'ggg', 'hhh', 'iii', 'jjj'],
       ['aaa', 'bbb', 'ccc', 'ddd', 'eee'],
       ['fff', 'ggg', 'hhh', 'iii', 'jjj']], dtype='<U3')

# 将数组保存成csv文件,每个数据之间用逗号隔开
np.savetxt('ndarray1.csv', ndarray1, delimiter=',', fmt='%s')
# 读取保存的ndarray1.csv文件
np.genfromtxt('ndarray1.csv', delimiter=',', dtype=np.unicode)
--------------------------------
array([['aaa', 'bbb', 'ccc', 'ddd', 'eee'],
       ['fff', 'ggg', 'hhh', 'iii', 'jjj'],
       ['aaa', 'bbb', 'ccc', 'ddd', 'eee'],
       ['fff', 'ggg', 'hhh', 'iii', 'jjj']], dtype='<U3')

数组的有关知识就先总结到这里,下期猫哥将开始总结pandas的相关知识!