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的相关知识!
上一篇: 工厂模式-PHP的反射机制
下一篇: matplotlib 无法显示中文
推荐阅读
-
现在就能投入使用的12个高端大气上档次的CSS3特性_html/css_WEB-ITnose
-
php通过array_merge()函数合并关联和非关联数组的方法_PHP教程
-
EXEC的使用与sp_executesql命令的区别
-
php中使用PHPExcel读写excel(xls)文件的方法,
-
详细介绍c#消息提示框messagebox的使用
-
使用hibernate的criteria实现统计数量及多表查询
-
c# 使用Task实现非阻塞式的I/O操作
-
使用内置函数解决PHP多维数组排序问题
-
学以致用——Java源码——使用多态输出平面及立体几何图形的面积和体积(Project: Shape Hierarchy)
-
spring boot项目使用@JsonFormat失效问题的解决