科学计算库——Numpy基础

文章目录

第一部分 为什么要用Numpy

1.1 低效的Python for循环

  • 【例】 求100万个数的倒数
def compute_reciprocals(values):
    res = []
    for value in values:      # 每遍历到一个元素,就要判断其类型,并查找适用于该数据类型的正确函数
        res.append(1/value)
    return res
​
​
values = list(range(1, 1000000))
%timeit compute_reciprocals(values)
100 ms ± 822 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
  • %timeit :ipython中统计运行时间的魔术方法(多次运行取平均值)
import numpy as np
​
values = np.arange(1, 1000000)
%timeit 1/values    
4.28 ms ± 285 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
  • 实现相同计算,Numpy的运行速度是Python循环的25倍,产生了质的飞跃

1.2 Numpy为什么如此高效

  • Numpy 是由C语言编写的
  1. 编译型语言VS解释型语言
    C语言执行时,对代码进行整体编译,速度更快。
  2. 连续单一类型存储VS分散多变类型存储
    (1)Numpy数组内的数据类型必须是统一的,如全部是浮点型,而Python列表支持任意类型数据的填充。
    (2)Numpy数组内的数据连续存储在内存中,而Python列表的数据分散在内存中。
    这种存储结构,与一些更加高效的底层处理方式更加的契合。
  3. 多线程VS线程锁
    Python语言执行时有线程锁,无法实现真正的多线程并行,而C语言可以。

1.3 什么时候用Numpy

  • 在数据处理的过程中,遇到使用“Python for循环” 实现一些向量化、矩阵化操作的时候,要优先考虑用Numpy。
  • 如:两个向量的点乘、矩阵乘法

第二部分 Numpy数组的创建

2.1 从列表开始创建

import numpy as np
​
x = np.array([1, 2, 3, 4, 5])
print(x)
print(type(x))
print(x.shape)
[1 2 3 4 5]
<class 'numpy.ndarray'>
(5,)
设置数组的数据类型
import numpy as np

x = np.array([1, 2, 3, 4, 5], dtype="float32")
print(x)
print(type(x[0]))
[1. 2. 3. 4. 5.]
<class 'numpy.float32'>
二维数组
import numpy as np

x = np.array([[1, 2, 3],
             [4, 5, 6],
             [7, 8, 9]])
print(x)
print(x.shape)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
(3, 3)

2.2 从头创建数组

2.2.1 np.zeros 创建值都为0的数组

import numpy as np

print(np.zeros(5, dtype=int))
[0 0 0 0 0]

2.2.2 np.ones 创建一个值都为1的数组

import numpy as np

print(np.ones((2, 4), dtype=float))
[[1. 1. 1. 1.]
 [1. 1. 1. 1.]]

2.2.3 np.full 创建一个值都为指定数字的数组

import numpy as np

print(np.full((3, 5), 8.8))
[[8.8 8.8 8.8 8.8 8.8]
 [8.8 8.8 8.8 8.8 8.8]
 [8.8 8.8 8.8 8.8 8.8]]

2.2.4 np.eye 创建一个单位矩阵

import numpy as np

print(np.eye(3))
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

2.2.5 np.arange 创建一个线性序列数组

import numpy as np

print(np.arange(1, 15, 2))    # 从1开始,到15结束,步长为2
[ 1  3  5  7  9 11 13]

2.2.6 np.linspace 创建一个等差数列

import numpy as np

print(np.linspace(0, 1, 4))    # 四个数均匀的分配到0~1
[0.         0.33333333 0.66666667 1.        ]

2.2.7 np.logspace 创建一个等比数列

import numpy as np

print(np.logspace(0, 9, 10))    # 10个元素形成10^0~10^9的等比数列
[1.e+00 1.e+01 1.e+02 1.e+03 1.e+04 1.e+05 1.e+06 1.e+07 1.e+08 1.e+09]

2.2.8 np.random.random 创建一个在0~1之间均匀分布的随机数构成的数组

import numpy as np

print(np.random.random((3,3)))
[[0.43103112 0.90163353 0.97183695]
 [0.11083239 0.10790603 0.25855347]
 [0.58590392 0.49101639 0.43734257]]

2.2.9 np.random.rand 创建一个在0~1之间均匀分布的随机数构成的数组

import numpy as np

print(np.random.rand(3,3))
[[0.43103112 0.90163353 0.97183695]
 [0.11083239 0.10790603 0.25855347]
 [0.58590392 0.49101639 0.43734257]]

2.2.10 np.random.normal 创建一个正态分布随机数构成的数组

import numpy as np

print(np.random.normal(0, 1, (3,3)))    # 形状3*3,均值为0,标准差为1
[[ 0.71657085  0.2826025  -0.34395535]
 [ 0.16207986  0.33397837 -0.16482997]
 [-0.50180039 -1.18629584  0.17830969]]

2.2.11 np.random.randn 创建一个标准正态分布随机数构成的数组

import numpy as np

print(np.random.randn(3,3))    # 等价于np.random.normal(0, 1, (3,3))
[[ 0.08651861 -0.24051704  0.70060128]
 [-1.20089869  0.835285    0.47519735]
 [-1.41045256  0.50119295 -1.46519798]]

2.2.12 np.random.randint 创建随机整数构成的数组

import numpy as np

print(np.random.randint(0, 10, (3,3)))    # 形状3*3,在[0,10)之间
print(np.random.randint(10, size=(3,3)))
[[2 9 8]
 [5 4 8]
 [8 8 3]]
[[1 4 0]
 [5 9 2]
 [4 0 1]]

2.2.13 随机重排列

np.random.permutation 产生新列表
np.random.shuffle 修改原列表
import numpy as np

x = np.array([10, 20, 30, 40])
print(np.random.permutation(x))      # 产生新列表
print(x)
np.random.shuffle(x)          # 修改原列表
print(x)
[30 10 40 20]
[10 20 30 40]
[10 30 20 40]

2.2.14 np.random.choice 按指定形状随机采样,可指定概率

import numpy as np

x = np.arange(10, 25, dtype = float)
print(x)
print(np.random.choice(x, size=(4, 3)))
print(np.random.choice(10, 5))    # 在0到9中采样5次
print(np.random.choice(x, 5, p=x/np.sum(x)))    # 指定概率
[10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24.]
[[22. 11. 21.]
 [19. 15. 18.]
 [11. 10. 11.]
 [22. 14. 24.]]
[8 7 0 5 4]
[23. 11. 15. 17. 22.]

第三部分 Numpy数组的性质

3.1 数组的属性

数组的形状 shape
数组的维度 ndim
数组的大小 size
数组的数据类型 dtype
import numpy as np

x = np.random.randint(10, size=(3, 4))
print(x)
print(x.shape)
print(x.ndim)
y = np.arange(10)
print(y.ndim)
print(x.size)
print(x.dtype)
[[3 0 9 7]
 [2 1 1 8]
 [0 5 8 3]]
(3, 4)
2
1
12
int32

3.2 数组的索引

3.2.1 一维数组的索引——与列表一样

import numpy as np

x1 = np.arange(10)
print(x1)
print(x1[0])
print(x1[-1])
[0 1 2 3 4 5 6 7 8 9]
0
9

3.2.2 多维数组的索引——以二维为例

import numpy as np

x2 = np.random.randint(0, 20, (2,3))
print(x2)
print(x2[0, 0])
print(x2[0][0])

x2[0, 0] = 1.618
print(x2)
[[11  8  9]
 [ 8  7  0]]
11
11
[[1 8 9]
 [8 7 0]]

注意: numpy数组的数据类型是固定的,向一个整型数组插入一个浮点值,浮点值会向下进行取整

3.3 数组的切片

3.3.1 一维数组——跟列表一样

import numpy as np

x1 = np.arange(10)
print(x1)
print(x1[:3])
print(x1[3:])
print(x1[::-1])
[0 1 2 3 4 5 6 7 8 9]
[0 1 2]
[3 4 5 6 7 8 9]
[9 8 7 6 5 4 3 2 1 0]

3.3.2 多维数组——以二维为例

import numpy as np

x2 = np.random.randint(20, size=(3,4)) 
print(x2)
print(x2[:2, :3])             # 前两行,前三列
print(x2[:2, 0:3:2])       # 前两行 前三列(每隔一列)
print(x2[::-1, ::-1])
[[ 9 15 17  8]
 [ 9 16  5 15]
 [ 5  5 15 13]]
[[ 9 15 17]
 [ 9 16  5]]
[[ 9 17]
 [ 9  5]]
[[13 15  5  5]
 [15  5 16  9]
 [ 8 17 15  9]]

3.3.3 获取数组的行和列

import numpy as np

x3 = np.random.randint(20, size=(3,4)) 
print(x3)
print(x3[1, :])   #第一行  从0开始计数
print(x3[1])    # 第一行简写
print(x3[:, 2])  # 第二列   从0开始计数
[[18 11 14  1]
 [14 12  0 12]
 [ 6  9 11 13]]
[14 12  0 12]
[14 12  0 12]
[14  0 11]

3.3.4 切片获取的是视图,而非副本

import numpy as np

x4 = np.random.randint(20, size=(3,4)) 
print(x4)
x5 = x4[:2, :2]
print(x5)
x5[0, 0] = 0
print(x5)
print(x4)
[[ 3 19  9  0]
 [17  3  8 16]
 [11 19  2  5]]
[[ 3 19]
 [17  3]]
[[ 0 19]
 [17  3]]
[[ 0 19  9  0]
 [17  3  8 16]
 [11 19  2  5]]

注意: 视图元素发生修改,则原数组亦发生相应修改

修改切片的安全方式:copy()
import numpy as np

x4 = np.random.randint(20, size=(3,4)) 
print(x4)
x6 = x4[:2, :2].copy()
print(x6)
x6[0, 0] = 0
print(x6)
print(x4)
[[15 15 13 17]
 [16 13 14  6]
 [ 6 18  3 15]]
[[15 15]
 [16 13]]
[[ 0 15]
 [16 13]]
[[15 15 13 17]
 [16 13 14  6]
 [ 6 18  3 15]]

3.4 数组的变形

3.4.1 reshape——视图

import numpy as np

x5 = np.random.randint(0, 10, (12,))
print(x5)
x6 = x5.reshape(3, 4)
print(x6)
x6[0, 0] = 0
print(x5)
[1 2 6 7 9 3 3 9 4 7 5 6]
[[1 2 6 7]
 [9 3 3 9]
 [4 7 5 6]]
[0 2 6 7 9 3 3 9 4 7 5 6]

3.4.2 一维向量转行向量 reshape、np.newaxis——视图

import numpy as np

x5 = np.random.randint(0, 10, (12,))
print(x5)
x7 = x5.reshape(1, x5.shape[0])    
print(x7)
x8 = x5[np.newaxis, :]
print(x8)
[8 8 8 4 8 1 3 9 1 8 0 2]
[[8 8 8 4 8 1 3 9 1 8 0 2]]
[[8 8 8 4 8 1 3 9 1 8 0 2]]

3.4.3 一维向量转列向量 reshape、np.newaxis——视图

import numpy as np

x5 = np.random.randint(0, 10, (5,))
print(x5)
x7 = x5.reshape(x5.shape[0], 1)    
print(x7)
x8 = x5[:, np.newaxis]
print(x8)
[8 8 4 5 6]
[[8]
 [8]
 [4]
 [5]
 [6]]
[[8]
 [8]
 [4]
 [5]
 [6]]

3.4.4 多维向量转一维向量

flatten()——副本
import numpy as np

x6 = np.random.randint(0, 10, (3, 4))
print(x6)
x9 = x6.flatten()
print(x9)
[[9 3 2 6]
 [9 0 6 2]
 [3 9 7 8]]
[9 3 2 6 9 0 6 2 3 9 7 8]
ravel()——视图
import numpy as np

x6 = np.random.randint(0, 10, (3, 4))
print(x6)
x10 = x6.ravel()
print(x10)
[[4 5 1 9]
 [2 5 3 0]
 [4 5 5 2]]
[4 5 1 9 2 5 3 0 4 5 5 2]
reshape(-1)——视图
import numpy as np

x6 = np.random.randint(0, 10, (3, 4))
print(x6)
x11 = x6.reshape(-1)
print(x11)
[[8 2 4 5]
 [0 3 3 7]
 [7 5 0 7]]
[8 2 4 5 0 3 3 7 7 5 0 7]

3.5 数组的拼接

3.5.1 水平拼接 np.hstack([x1, x2])、np.c_[x1, x2]——副本

import numpy as np

x1 = np.array([[1, 2, 3],
              [4, 5, 6]])
x2 = np.array([[7, 8, 9],
              [0, 1, 2]])

x3 = np.hstack([x1, x2])
print(x3)

x4 = np.c_[x1, x2]
print(x4)
[[1 2 3 7 8 9]
 [4 5 6 0 1 2]]
[[1 2 3 7 8 9]
 [4 5 6 0 1 2]]

3.5.2 垂直拼接np.vstack([x1, x2])、np.r_[x1, x2]——副本

import numpy as np

x1 = np.array([[1, 2, 3],
              [4, 5, 6]])
x2 = np.array([[7, 8, 9],
              [0, 1, 2]])

x5 = np.vstack([x1, x2])
print(x5)

x6 = np.r_[x1, x2]
print(x6)
[[1 2 3]
 [4 5 6]
 [7 8 9]
 [0 1 2]]
[[1 2 3]
 [4 5 6]
 [7 8 9]
 [0 1 2]]

3.6 数组的分割

3.6.1 split的用法——视图

import numpy as np

x6 = np.arange(10)
print(x6)

x1, x2, x3 = np.split(x6, [2, 7])
print(x1, x2, x3)
[0 1 2 3 4 5 6 7 8 9]
[0 1] [2 3 4 5 6] [7 8 9]

3.6.2 hsplit的用法——视图

import numpy as np

x7 = np.arange(1, 16).reshape(3, 5)
print(x7)

left, middle, right = np.hsplit(x7, [2,4])
print("left:\n", left)            # 第0~1列
print("middle:\n", middle)        # 第2~3列
print("right:\n", right)          # 第4列
[[ 1  2  3  4  5]
 [ 6  7  8  9 10]
 [11 12 13 14 15]]
left:
 [[ 1  2]
 [ 6  7]
 [11 12]]
middle:
 [[ 3  4]
 [ 8  9]
 [13 14]]
right:
 [[ 5]
 [10]
 [15]]

3.6.3 vsplit的用法——视图

import numpy as np

x7 = np.arange(1, 16).reshape(5, 3)
print(x7)

upper, middle, lower = np.vsplit(x7, [2,4])
print("upper:\n", upper)         # 第0~1行
print("middle:\n", middle)       # 第2~3行
print("lower:\n", lower)         # 第4行
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]
 [13 14 15]]
upper:
 [[1 2 3]
 [4 5 6]]
middle:
 [[ 7  8  9]
 [10 11 12]]
lower:
 [[13 14 15]]

3.7 根据索引数组生成数组——副本

3.7.1 一维数组

import numpy as np

x = np.random.randint(100, size=10)
print(x)

ind = [2, 6, 9]
print(x[ind])

ind = np.array([[1, 0],
               [2, 3]])
print(x[ind])
[72 74 19 52 14 98 22 67 52 99]
[19 22 99]
[[74 72]
 [19 52]]

3.7.2 多维数组

import numpy as np

x = np.arange(12).reshape(3, 4)
print(x)

row = np.array([0, 1, 2])
col = np.array([1, 3, 0])
print(x[row, col])               # x(0, 1) x(1, 3) x(2, 0)

print(row[:, np.newaxis])       # 列向量

print(x[row[:, np.newaxis], col])    # 广播机制
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
[1 7 8]
[[0]
 [1]
 [2]]
[[ 1  3  0]
 [ 5  7  4]
 [ 9 11  8]]

第四部分 Numpy四大运算

4.1 向量运算

4.1.1 与数字的加减乘除等

import numpy as np

x1 = np.arange(1,6)
print(x1)

print("x1+5", x1+5)
print("x1-5", x1-5)
print("x1*5", x1*5)
print("x1/5", x1/5)

print("-x1", -x1)
print("x1**2", x1**2)
print("x1//2", x1//2)
print("x1%2", x1%2)
[1 2 3 4 5]
x1+5 [ 6  7  8  9 10]
x1-5 [-4 -3 -2 -1  0]
x1*5 [ 5 10 15 20 25]
x1/5 [0.2 0.4 0.6 0.8 1. ]
-x1 [-1 -2 -3 -4 -5]
x1**2 [ 1  4  9 16 25]
x1//2 [0 1 1 2 2]
x1%2 [1 0 1 0 1]

4.1.2 绝对值、三角函数、指数、对数

绝对值 abs、np.abs
import numpy as np

x2 = np.array([1, -1, 2, -2, 0])
print(x2)

print(abs(x2))
print(np.abs(x2))
[ 1 -1  2 -2  0]
[1 1 2 2 0]
[1 1 2 2 0]
三角函数 np.sin、np.cos、np.tan、np.arcsin、np.arccos、np.arctan
import numpy as np

theta = np.linspace(0, np.pi, 3)
print(theta)

print("sin(theta)", np.sin(theta))
print("cos(theta)", np.cos(theta))
print("tan(theta)", np.tan(theta))

x = [1, 0 ,-1]
print("arcsin(x)", np.arcsin(x))
print("arccon(x)", np.arccos(x))
print("arctan(x)", np.arctan(x))
[0.         1.57079633 3.14159265]
sin(theta) [0.0000000e+00 1.0000000e+00 1.2246468e-16]
cos(theta) [ 1.000000e+00  6.123234e-17 -1.000000e+00]
tan(theta) [ 0.00000000e+00  1.63312394e+16 -1.22464680e-16]
arcsin(x) [ 1.57079633  0.         -1.57079633]
arccon(x) [0.         1.57079633 3.14159265]
arctan(x) [ 0.78539816  0.         -0.78539816]
指数运算 np.exp
import numpy as np

x = np.arange(3)
print(x)
print(np.exp(x))
对数运算 np.log、np.log2、np.log10
import numpy as np

x = np.array([1, 2, 4, 8 ,10])
print("ln(x)", np.log(x))
print("log2(x)", np.log2(x))
print("log10(x)", np.log10(x))
ln(x) [0.         0.69314718 1.38629436 2.07944154 2.30258509]
log2(x) [0.         1.         2.         3.         3.32192809]
log10(x) [0.         0.30103    0.60205999 0.90308999 1.        ]

4.1.3 两个数组的运算——对应位置元素分别运算

import numpy as np

x1 = np.arange(1,6)
print(x1)

x2 = np.arange(6,11)
print(x2)

print("x1+x2:", x1+x2)
print("x1-x2:", x1-x2)
print("x1*x2:", x1*x2)
print("x1/x2:", x1/x2)
[1 2 3 4 5]
[ 6  7  8  9 10]
x1+x2: [ 7  9 11 13 15]
x1-x2: [-5 -5 -5 -5 -5]
x1*x2: [ 6 14 24 36 50]
x1/x2: [0.16666667 0.28571429 0.375      0.44444444 0.5       ]

4.2 矩阵运算

4.2.1 矩阵的转置 x.T——视图

import numpy as np

x = np.arange(9).reshape(3, 3)
print(x)

y = x.T
print(y)
[[0 1 2]
 [3 4 5]
 [6 7 8]]
[[0 3 6]
 [1 4 7]
 [2 5 8]]

4.2.2 矩阵乘法 x.dot(y)、np.dot(x, y)

import numpy as np

x = np.array([[1, 0],
             [1, 1]])
y = np.array([[0, 1],
             [1, 1]])

print(x.dot(y))
print(np.dot(x, y))

print(x*y)
[[0 1]
 [1 2]]
[[0 1]
 [1 2]]
[[0 0]
 [1 1]]
  • 注意跟x * y的区别,x * y是对应位置元素相乘

4.3 广播运算

  • 规则
    如果两个数组的形状在维度上不匹配
    那么数组的形式会沿着维度为1的维度进行扩展以匹配另一个数组的形状。
import numpy as np

x = np.arange(3).reshape(1, 3)
print(x)
print(x+5)    # 先把5扩展成1×3的形状,再相加
[[0 1 2]]
[[5 6 7]]
import numpy as np

x1 = np.ones((3,3))
print(x1)

x2 = np.arange(3).reshape(1, 3)
print(x2)

print(x1+x2)    # 先把1×3扩展成3×3的形状,再相加
[[1. 1. 1.]
 [1. 1. 1.]
 [1. 1. 1.]]
[[0 1 2]]
[[1. 2. 3.]
 [1. 2. 3.]
 [1. 2. 3.]]
import numpy as np

x5 = np.arange(3).reshape(3, 1)
print(x5)

x6 = np.arange(3).reshape(1, 3)
print(x6)

print(x5+x6)    # 分别扩展成3×3的形状,再相加
[[0]
 [1]
 [2]]
[[0 1 2]]
[[0 1 2]
 [1 2 3]
 [2 3 4]]

4.4 比较运算和掩码——逻辑运算要用 & 而不能用 and !!!

4.4.1 比较运算

import numpy as np

x1 = np.random.randint(100, size=(3,3))
print(x1)
print(x1 > 50)
[[38 38 79]
 [ 3 54 97]
 [23 31 19]]
[[False False  True]
 [False  True  True]
 [False False False]]

4.4.2 操作布尔数组 np.sum(统计个数)、np.all、np.any

import numpy as np

x2 = np.random.randint(10, size=(3, 4))
print(x2)

print(x2 > 5)
print(np.sum(x2 > 5))    # 大于5的元素有几个
print(np.all(x2 > 0))    # 所有都满足条件
print(np.any(x2 == 6))    # 至少一个满足条件
print((x2 < 9, axis=1).all())   # 每行的元素是否都小于9,axis=0为按列
print((x2 < 9) & (x2 >5))

print(((x2 < 9) & (x2 >5)).sum())    # 加入逻辑运算
[[8 3 9 3]
 [3 3 8 1]
 [9 2 8 8]]
[[ True False  True False]
 [False False  True False]
 [ True False  True  True]]
6
True
False
[False  True False]
[[ True False False False]
 [False False  True False]
 [False False  True  True]]
4

4.4.2 将布尔数组作为掩码——副本

import numpy as np

x2 = np.random.randint(10, size=(3, 4))
print(x2)
print(x2 > 5)
print(x2[x2 > 5])
[[8 9 2 1]
 [1 6 1 4]
 [1 2 0 9]]
[[ True  True False False]
 [False  True False False]
 [False False False  True]]
[8 9 6 9]

第五部分 其他Numpy通用函数

5.1 数值排序 np.sort(x)、x.sort()

import numpy as np

x = np.random.randint(20, 50, size=10)
print(x)

print(np.sort(x))    # 产生新的排序数组
print(x)

x.sort()    # 替换原数组
print(x)
[44 20 21 41 35 44 32 45 29 28]
[20 21 28 29 32 35 41 44 44 45]
[44 20 21 41 35 44 32 45 29 28]
[20 21 28 29 32 35 41 44 44 45]
获得排序索引 np.argsort(x)、x.argsort()
import numpy as np

x = np.random.randint(20, 50, size=10)
print(x)
i = np.argsort(x)
print(i)
print(x.argsort())
[20 47 24 26 24 44 44 41 40 36]
[0 2 4 3 9 8 7 5 6 1]
[0 2 4 3 9 8 7 5 6 1]

5.2 最大最小值及索引

import numpy as np

x = np.random.randint(20, 50, size=10)
print(x)

print("max:", np.max(x))
print("min:", x.min())

print("max_index:", x.argmax())
print("min_index:", np.argmin(x))
[26 48 24 29 35 23 47 37 46 26]
max: 48
min: 23
max_index: 1
min_index: 5

5.3 元素求和、求积

5.3.1 求和 np.sum(x)、x.sum()

axis指定维度,不指定则全体求和
keepdims指定是否保持数组维度,默认False
import numpy as np

x1 = np.arange(6).reshape(2,3)
print(x1)

print(np.sum(x1, axis=1))    # 按行求和
print(x1.sum(axis=1, keepdims=True))
print(np.sum(x1, axis=0))    # 按列求和
print(x1.sum(axis=0, keepdims=True))
print(np.sum(x1))    # 全体求和
print(x1.sum(keepdims=True))
[[0 1 2]
 [3 4 5]]
[ 3 12]
[[ 3]
 [12]]
[3 5 7]
[[3 5 7]]
15
[[15]]

5.3.2 求积 np.prod(x)、x.prod(),参数与求和一样

import numpy as np

x1 = np.arange(1,7).reshape(2,3)
print(x1)
print(x1.prod())
print(np.prod(x1))
[[1 2 3]
 [4 5 6]]
720
720

5.4 中位数median、均值mean、方差var、标准差std

import numpy as np

x = np.random.normal(0, 1, size=10000)
print(np.median(x))    # 中位数 没有x.median()的写法
print(x.mean())    # 均值
print(np.mean(x))
print(x.var())    # 方差
print(np.var(x))
print(x.std())    # 标准差
print(np.std(x))
-0.0005526165156031632
-0.0031363778888049655
-0.0031363778888049655
0.993877024048911
0.993877024048911
0.9969338112677847
0.9969338112677847
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值