什么是NumPy
NumPy是高性能的科学计算和数据分析基础包
导入
import numpy as np
多维数组ndarray
创建一维数组
data = [1, 2, 3, 4]
arr = np.array(data)
print(arr)
[1 2 3 4]
创建多维数组
data = [1, 2, 3, 4]
data1 = [data, data]
arr = np.array(data1)
print(arr)
[[1 2 3 4]
[1 2 3 4]]
快速初始化创建数组
全0数组
data = np.zeros((2, 4))
print(data)
[[ 0. 0. 0. 0.]
[ 0. 0. 0. 0.]]
全1数组
data = np.ones((2, 4))
print(data)
[[ 1. 1. 1. 1.]
[ 1. 1. 1. 1.]]
等差数列
方法一
data = np.arange(1, 10, 2) #1-10之间获取差为2的等差数列,不包含 终止值(10)
print(data)
[1 3 5 7 9]
方法二
data = np.linspace(1, 10, 6) #1-10之间获取6个元素,它们构成的等差数列,默认包含终止值(10)
print(data)
[ 1. 2.8 4.6 6.4 8.2 10. ]
数组类型
常用的类型有float,int,bool,string,unicode
arr_int = np.array([1, 2, 3])
arr_float = np.array([1.1, 2, 3])
arr_unicode = np.array(['北京', '天津11'])
print(arr_int.dtype, arr_float.dtype, arr_unicode.dtype)
int32 float64 <U4
类型互转
arr_int = np.array([1, 2, 3])
arr_float = np.array([1.1, 2, 3])
arr_int_to_float = arr_int.astype(np.float64)
arr_float_to_int = arr_float.astype(np.int32)
print(arr_int_to_float,arr_float_to_int)
[ 1. 2. 3.] [1 2 3] # 注:float转int后小数点会消失
数组的存储类型和如何存储的详细可以参考: https://blog.csdn.net/pipisorry/article/details/39215089#commentBox
数据索引和切片
获取第2行数据
data[1]
[4 5 6]
获取第2列数据
data[:,1]
[2 5 8]
获取第1行第2列数据
data[0,1]
2
获取前两行数据
data[:2]
[[1 2 3]
[4 5 6]]
获取第一列以后的数据
data[:,1:]
[[2 3]
[5 6]
[8 9]]
获取倒数两行数据
data[-2:]
[[4 5 6]
[7 8 9]]
数组赋值
对第二行和第二列内的元素统一赋值成0
data = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
data[:2,:2] = 0
print(data)
[[0 0 3]
[0 0 6]
[7 8 9]]
若不想改变源数组的值,可以使用copy进行赋值,涉及到浅拷贝和深拷贝的区别参考 https://www.cnblogs.com/xiaxiaoxu/p/9742452.html
以上简单分片的示例,详细可以参考 https://www.jianshu.com/p/15715d6f4dad
基本运算
相加
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2 = np.array([[2, 2, 2], [3, 3, 3], [4, 4, 4]])
arr = arr1+arr2
print(arr)
[[ 3 4 5]
[ 7 8 9]
[11 12 13]]
相乘
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2 = np.array([[2, 2, 2], [3, 3, 3], [4, 4, 4]])
arr = arr1*arr2
print(arr)
[[ 2 4 6]
[12 15 18]
[28 32 36]]
数值乘
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr = arr1*10
print(arr)
[[10 20 30]
[40 50 60]
[70 80 90]]
根号
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr = arr1**0.5
print(arr)
[[ 1. 1.41421356 1.73205081]
[ 2. 2.23606798 2.44948974]
[ 2.64575131 2.82842712 3. ]]
常用的统计函数见下表
随机数
示例
import numpy.random as npr
import matplotlib.pyplot as plt
size = 1000
rn1 = npr.rand(size, 2)
rn2 = npr.randn(size)
rn3 = npr.randint(0, 10, size)
rang = [0, 1, 2, 3, 4, 5]
rn4 = npr.choice(rang, size=size)
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, figsize=(10, 10))
ax1.hist(rn1, bins=25, stacked=True)
ax1.set_title('rand')
ax1.set_ylabel('frequency')
ax1.grid(True)
ax2.hist(rn2, bins=25, stacked=True)
ax2.set_title('randn')
ax2.grid(True)
ax3.hist(rn3, bins=25, stacked=True)
ax3.set_title('randint')
ax3.set_ylabel('frequency')
ax3.grid(True)
ax4.hist(rn4, bins=25, stacked=True)
ax4.set_title('choice')
ax4.grid(True)
plt.show()