001Numpy基础

import numpy as np

ndarray 多维数组

  • Array数组创建函数
# np.array()
arr_1 = np.array([[1,2,3],[5,6,7]])
type(arr_1)
numpy.ndarray
arr_1.shape
(2, 3)
arr_1.dtype
dtype('int32')
arr_2 = np.array([[1,2,3],[5,6,7]],dtype = np.float32)
arr_2.dtype
dtype('float32')
# 更改array的数据类型,.astype(np.)
arr_3 = arr_2.astype(np.int32)
arr_3.dtype
dtype('int32')
# np.zeros(),全0数组
np.zeros(6)
array([0., 0., 0., 0., 0., 0.])
np.zeros((3,4))
array([[0., 0., 0., 0.],
       [0., 0., 0., 0.],
       [0., 0., 0., 0.]])
# np.ones(),全1数组
np.ones(6)
array([1., 1., 1., 1., 1., 1.])
np.ones((3,4))
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])
# np.empty() 只分配内容控件不填充任何值
np.empty((2,3,3))
array([[[1.04246130e-297, 1.69121096e-306, 1.29061074e-306],
        [1.69119873e-306, 1.78019082e-306, 8.34441742e-308],
        [1.78022342e-306, 6.23058028e-307, 9.79107872e-307]],

       [[6.89807188e-307, 7.56594375e-307, 6.23060065e-307],
        [1.78021527e-306, 8.34454050e-308, 1.11261027e-306],
        [1.15706896e-306, 1.33512173e-306, 3.49698923e-317]]])
# np.arange(),类似内置的range,返回的是Array数组
np.arange(12).reshape(3,4)
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
# np.eye(),单位矩阵
np.eye(6)
array([[1., 0., 0., 0., 0., 0.],
       [0., 1., 0., 0., 0., 0.],
       [0., 0., 1., 0., 0., 0.],
       [0., 0., 0., 1., 0., 0.],
       [0., 0., 0., 0., 1., 0.],
       [0., 0., 0., 0., 0., 1.]])

数组运算

  • 算术运算
arr = np.arange(12).reshape(3,4)
arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
arr+arr
array([[ 0,  2,  4,  6],
       [ 8, 10, 12, 14],
       [16, 18, 20, 22]])
arr*arr
array([[  0,   1,   4,   9],
       [ 16,  25,  36,  49],
       [ 64,  81, 100, 121]])
  • 索引
  • 切片
arr[0]
arr[:3]
arr[-1]
array([ 8,  9, 10, 11])
arr[1,2]
6
arr[1][2]
6
arr[1,2] = 66
arr
array([[ 0,  1,  2,  3],
       [ 4,  5, 66,  7],
       [ 8,  9, 10, 11]])
# 转置
arr.T
array([[ 0,  4,  8],
       [ 1,  5,  9],
       [ 2, 66, 10],
       [ 3,  7, 11]])

布尔型数组

names = np.array(['Bob','Joe','Will'])
date = np.arange(1,10,4)
names == 'Bob'
array([ True, False, False])
date
array([1, 5, 9])
date[names == 'Bob']
array([1])
date[~(names == 'Bob')]
array([5, 9])
date[names != 'Bob']
array([5, 9])
date[date>=5]
array([5, 9])

多个布尔条件 算术运算

  • 且 &
  • 或 |
key = (names == 'Bob' ) | (date<3)
key
array([ True, False, False])
key = (names == 'Bob' ) & (date<3)
key
array([ True, False, False])

通用函数 – ufunc

arr = np.arange(10)
np.sqrt(arr) # 计算各个元素的平方根
array([0.        , 1.        , 1.41421356, 1.73205081, 2.        ,
       2.23606798, 2.44948974, 2.64575131, 2.82842712, 3.        ])
np.exp(arr) # 计算各个元素的指数e^x
array([1.00000000e+00, 2.71828183e+00, 7.38905610e+00, 2.00855369e+01,
       5.45981500e+01, 1.48413159e+02, 4.03428793e+02, 1.09663316e+03,
       2.98095799e+03, 8.10308393e+03])
x = np.random.randn(8)
x
array([ 1.54492539,  1.23743264, -0.43177947, -0.62904697, -0.49509432,
        1.37267661,  0.45616824,  0.69478241])
y = np.random.randn(8)
y
array([ 1.41358016,  1.71561102,  0.30880553,  2.34460093,  0.31110363,
        2.00262837,  0.89447709, -0.61136333])
np.rint(x) # 各个元素四舍五入到最近的整数,保留dtype
array([ 2.,  1., -0., -1., -0.,  1.,  0.,  1.])
np.isnan(x) # 判断哪些元素是NaN
array([False, False, False, False, False, False, False, False])
  • 二元 ufunc

更多通用函数 取numpy官网查询

np.add(x,y)# 将数组中对应元素相加
array([ 2.95850554,  2.95304366, -0.12297395,  1.71555397, -0.18399068,
        3.37530498,  1.35064533,  0.08341909])
np.minimum(x,y)# 元素级最小值计算
array([ 1.41358016,  1.23743264, -0.43177947, -0.62904697, -0.49509432,
        1.37267661,  0.45616824, -0.61136333])
np.fmin(x,y)# 元素级最小值计算,忽略NaN
array([ 1.41358016,  1.23743264, -0.43177947, -0.62904697, -0.49509432,
        1.37267661,  0.45616824, -0.61136333])
np.maximum(x,y)# 元素级最大值计算
array([1.54492539, 1.71561102, 0.30880553, 2.34460093, 0.31110363,
       2.00262837, 0.89447709, 0.69478241])
np.fmax(x,y)# 元素级最大值计算,忽略NaN
array([1.54492539, 1.71561102, 0.30880553, 2.34460093, 0.31110363,
       2.00262837, 0.89447709, 0.69478241])

统计

arr = np.random.randn(3,4)
arr
array([[-0.26664427, -1.60844846, -0.59910976,  0.2213661 ],
       [ 2.11733409,  1.35787167,  1.03795679,  0.68043033],
       [-0.18726122, -0.18600493, -0.56661837,  1.72816168]])
arr.mean() # 均值
0.3107528023087508
arr.mean(1) # axis = 1,求每行的均值
array([-0.5632091 ,  1.29839822,  0.19706929])
arr.mean(0) #axis = 0,求每列的均值
array([ 0.5544762 , -0.14552724, -0.04259045,  0.8766527 ])
arr.sum() #求和
3.7290336277050096
arr.sum(1)
array([-2.2528364 ,  5.19359287,  0.78827716])
arr.sum(0)
array([ 1.66342859, -0.43658172, -0.12777135,  2.6299581 ])
arr = np.arange(12).reshape(3,4)
arr
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
arr.cumsum() # 元素累加
array([ 0,  1,  3,  6, 10, 15, 21, 28, 36, 45, 55, 66], dtype=int32)
arr.cumsum(1)# 元素行累加
array([[ 0,  1,  3,  6],
       [ 4,  9, 15, 22],
       [ 8, 17, 27, 38]], dtype=int32)
arr.cumsum(0)
array([[ 0,  1,  2,  3],
       [ 4,  6,  8, 10],
       [12, 15, 18, 21]], dtype=int32)
arr.cumprod()# 元素累积
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int32)
arr.std() # 标准差, 有axis操作
3.452052529534663
arr.std(0)
array([3.26598632, 3.26598632, 3.26598632, 3.26598632])
arr.var() # 方差
11.916666666666666
np.argmin(arr)# 最小元素的索引
0
np.argmax(arr) # 最大元素的索引
11
np.max(arr)
11
np.min(arr)
0
arr = np.random.randn(100)
# 布尔型数组
(arr > 0).sum()
54

排序

arr = np.random.randn(6)
arr
array([ 1.04535439,  0.46594185,  0.7804373 ,  1.56907968, -0.78065019,
        0.58804597])
arr.sort()
arr
array([-0.78065019,  0.46594185,  0.58804597,  0.7804373 ,  1.04535439,
        1.56907968])
  • 多维数组
arr = np.random.randn(3,4)
arr
array([[-1.37985941,  0.65325469, -0.28817527, -0.02299107],
       [ 0.4429337 ,  3.51252763, -1.02962186,  1.45001376],
       [-1.42937016, -0.65463081, -0.09767723, -0.49224928]])
arr.sort() # 有axis轴
arr
array([[-1.37985941, -0.28817527, -0.02299107,  0.65325469],
       [-1.02962186,  0.4429337 ,  1.45001376,  3.51252763],
       [-1.42937016, -0.65463081, -0.49224928, -0.09767723]])

去重

arr = np.random.randint(2,5,5)
arr
array([4, 4, 2, 4, 2])
np.unique(arr)
array([2, 4])
arr = np.random.randint(3,6,12).reshape(3,4)
arr
array([[4, 4, 4, 4],
       [5, 5, 3, 3],
       [4, 4, 3, 3]])
np.unique(arr)
array([3, 4, 5])

数组的集合运算

x = np.random.randint(2,6,10)
x
array([5, 2, 3, 4, 4, 3, 4, 5, 5, 2])
y = np.random.randint(3,7,10)
y
array([5, 4, 6, 3, 4, 4, 4, 6, 6, 6])
np.intersect1d(x,y) #求公共元素,交集
array([3, 4, 5])
np.union1d(x,y) # 求并集
array([2, 3, 4, 5, 6])
np.setdiff1d(x,y)# 集合的差
array([2])
np.setxor1d(x,y) # 求异或
array([2, 6])

Numpy输入输出

arr = np.random.randn(6)
np.save('demo',arr)# 以未压缩的原始二进制格式保存在扩展名为.npy的文件中
np.load('demo.npy')# 读取磁盘上的数组
arr
array([ 0.32358355,  0.91039905,  1.40027705,  1.2007988 ,  0.56437337,
       -1.37940863])
x = np.random.randn(6)
y = np.random.randn(8)
np.savez('demo.npz',a = x,b = y)# 保存多个数组到一个压缩文件中
arch = np.load('demo.npz')
arch['b']
array([-0.73327216,  0.64236622,  0.47694044, -0.76341329,  1.10744661,
        3.01207849, -2.31595105,  0.02843877])
  • 文本文件
z = np.random.randn(6)
np.savetxt('demo.txt',z)
a =np.loadtxt('demo.txt',delimiter = ',')
a
array([ 1.87221781, -1.19406744, -0.43478245, -0.69413357,  1.81840891,
        0.87762923])

点乘(矩阵乘法) – 线性代数函数

  • np.dot
  • x.T.dot(x),x.dot(y)
x = np.arange(1,13).reshape(3,4)
x
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12]])
x.T.dot(x)
array([[107, 122, 137, 152],
       [122, 140, 158, 176],
       [137, 158, 179, 200],
       [152, 176, 200, 224]])
x*x# 数组乘法
array([[  1,   4,   9,  16],
       [ 25,  36,  49,  64],
       [ 81, 100, 121, 144]])

猜你喜欢

转载自blog.csdn.net/DataFrame/article/details/83449139