numpy是高性能科学计算和数据分析的基础包,其主要操作对象为ndarray(一个快速,灵活的大数据容器)
import numpy as np
#创建一维
data1 = [1,2,3,4]
arr1 = np.array(data1)
array([1, 2, 3, 4])
#创建二维
data2 = [data1,data1]
arr2 = np.array(data2)
array([[1, 2, 3, 4],
[1, 2, 3, 4]])
#也可以手动
arr1 = np.array([1,2,3,4])
print(arr1,"\n")
arr2 = np.array([[1,2,3,4],[1,2,3,4]])
print(arr2)
[1 2 3 4]
[[1 2 3 4]
[1 2 3 4]]
array中数据不同于python提供的基础数据结构list、tuple,其中元素必须同类型。例如int、double、bool、string_ 、unicode_ 可以采用astype函数进行不同类型之间的转化这部分较为简单,不写代码演示
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
#提取某行
arr[1]
array([4, 5, 6])
#提取某列
arr[:,1]
array([2, 5, 8])
#提取某个元素
arr[1,1]
5
#提取某些行、列(注意x:y代表从x行/列到y-1行/列)
arr[0:3,0:2]
array([[1, 2],
[4, 5],
[7, 8]])
#可以通过提取多行多列对某些值进行统一赋值
arr[0:2,0:1] = 100
array([[100, 2, 3],
[100, 5, 6],
[ 7, 8, 9]])
#有时候想要一份修改新值的array而不修改原数据
arr2 = arr.copy()
arr2[0:2,0:1] = 10
[[100 2 3]
[100 5 6]
[ 7 8 9]]
[[10 2 3]
[10 5 6]
[ 7 8 9]]
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
#两个array之间的简单运算
print("加法:\n",arr+arr,"\n","减法:\n",arr-arr,"\n","乘法:\n",arr*arr,"\n","除法:\n",arr/arr)
加法:
[[ 2 4 6]
[ 8 10 12]
[14 16 18]]
减法:
[[0 0 0]
[0 0 0]
[0 0 0]]
乘法:
[[ 1 4 9]
[16 25 36]
[49 64 81]]
除法:
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
方法 | 说明 |
---|---|
sum | 对行列或者所有数据求和 |
mean | 求算数平均 |
std、var | 标准差、方差 |
min、max | 最小值、最大值 |
argmin、argmax | 最小值、最大值的索引 |
import numpy.random as npr
import matplotlib.pyplot as plt
#采样次数为1000
size = 1000
#n = 100,p = 0.3的二项分布
rand1 = npr.binomial(100,0.3,size)
#均值为10,标准差20的正态分布
rand2 = npr.normal(10,20,size)
#自由度为0.5的卡方分布
rand3 = npr.chisquare(0.5,size)
#λ为2的泊松分布
rand4 = npr.poisson(2,size)
fig,((ax1,ax2),(ax3,ax4)) = plt.subplots(nrows=2,ncols=2,figsize = (10,10))
ax1.hist(rand1,bins = 25)
ax1.set_title("binomial")
ax1.set_ylabel("frequency")
ax1.grid(True)
ax2.hist(rand2,bins = 25)
ax2.set_title("normal")
ax2.set_ylabel("frequency")
ax2.grid(True)
ax3.hist(rand3,bins = 25)
ax3.set_title("chisquare")
ax3.set_ylabel("frequency")
ax3.grid(True)
ax4.hist(rand4,bins = 25)
ax4.set_title("poisson")
ax4.set_ylabel("frequency")
ax4.grid(True)