typora-copy-images-to: ./…\Images
Array
array属性:
- shape:返回有个元组表示array的维度
- ndim:一个数字表示array的维度数目
- size:一个数字表示array中所有数据元素的数目
- dtype:array的数据类型
#arange ones/ones_like empty/empty_like eye random
x = np.array()
Array 的创建
arange(start,end,step)左闭右开创建数组
np.ones(shape,dtype,order=‘C’) shape可以是一个数字或者是一个元组来表示矩阵的形状来创造全是1的array
np.ones_like(a) a传递的是一个array也就是按照a的形状创造一个全是1的array
empty(shape) 创造全是0的array 数据是未初始化的不要使用
empty_like(a)
full(shape,value) 创造一个全是value的数组形如shape
full_like(a,value)
np.random.randn(d0,d1,…,dn) 几个数字就是几维
np.random.randint(start,end,num) 随机生成0~100的十个整数
Array的操作
reshape()对于数组形状的重载
np.sin(A)求每个数的sin
np.exp(A)求每个数的e^A
argsort()[n:m] 原数组排序后 返回从n到m-1个元素在原数组的下标
对数组按索引查询
基础索引
与数组索引一致,二维数组可用 [某,某]来实现索引其中可以是两个切片(但numpy切片的修改会改变原来的数组) ->也就是通过索引访问可以达到修改数组某一位置的值的目的
神奇索引
用整数数组进行索引
x = np.array([9,8,7,6,5,4,3,2,1,0])
x[[]]#中括号中可以是个数组并且返回的是索引数组元素值对应到x中的值
x[[3,4,7]] -> array([6, 5, 2])
#索引值是二维数组可以将原数组转成二维数组
index = np.array([[3,4],[0,1]])
x[index]
#------------------------#
array([[6, 5],
[9, 8]])
X = np.array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
X[[0,2,3],[1,3,4]]#返回的是[(0,1),(2,3),(3,4)]位置的数字并组成一维数组
X[:,[0,2,3]]#筛选列数
array([[ 0, 2, 3],
[ 5, 7, 8],
[10, 12, 13],
[15, 17, 18]])
X[[0,2,3],:]#筛选行数
array([[ 0, 1, 2, 3, 4],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])
布尔索引
x[x>5]返回数组中大于5的元素并合成为一个数组
二维数组中 X[X>5]返回的是一维数组
X[:,3]>5 将第三列大于5的进行筛选
条件组合 condition = (x%2==0) | (x>7) 可以手动设定条件
常用random随机函数
shuffle -> 如果数组是多维的那么只会在第一位都打散数据
permutation 不回打乱原来的数组而是生成一个新的copy
#添加噪声
import matplotlib.pyplot as plt
x = np.linspace(-10, 10,100)#最小 最大 之间生成100个数字
y = np.sin(x) + np.random.rand(len(x))
plt.plot(x,y)
plt.show()
数学统计函数
percentile
weights = np.random.rand(*arr.shape)
np.average(arr,weights = weights) 加权平均
Axis
axis = 0 表示行 = 1表示列
=0相当于把行消去 =1相当于把列消去
=0相当于跨行计算 =1跨列计算
数据进行标准化
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
#计算每列均值
mean = np.mean(arr,axis=0)
#计算每列方差
std = np.std(arr,axis= 0)
#计算分子 --每一行都会分别减去mean(广播)
fenzi = arr - mean
result = fenzi/std
#_#
array([[-1.22474487, -1.22474487, -1.22474487, -1.22474487],
[ 0. , 0. , 0. , 0. ],
[ 1.22474487, 1.22474487, 1.22474487, 1.22474487]])
计算数组中满足元素的个数
import numpy as np
arr = np.random.randint(1,10000,size=int(1e8))
arr[:10]
arr.size
arr[arr>5000].size
(arr>5000)[:10]
## 计算数组中满足元素的个数
```python
import numpy as np
arr = np.random.randint(1,10000,size=int(1e8))
arr[:10]
arr.size
arr[arr>5000].size
(arr>5000)[:10]