numpy的常用函数

时间:2021-09-10 18:58:09

1 算术平均值

数学运算

样本:[s1, s2, ..., sn]

算术平均值 = (s1 + s2 + ... + sn) / n

numpy函数

numpy.mean(样本) -> 算术平均值

2 加权平均值

数学运算

样本:[s1, s2, ..., sn]

权重:[w1, w2, ..., wn]

加权平均值=(s1w1 + s2w2 + ... + snwn) / (w1+w2+...+wn)

numpy函数

numpy.average(样本, weights=权重) -> 加权平均值

3 最大值和最小值

max() - 计算数组中元素的最大值

min() - 计算数组中元素的最小值

maximum() - 计算两个或多个数组对应元素的最大值并构成一个新的数组

minimum() - 计算两个或多个数组对应元素的最小值并构成一个新的数组

import numpy as np
a = np.array([[1,8],
              [3,9]])
b = np.array([[5,7],
              [4,6]])
print(np.maximum(a,b))
# [[5 8]
#  [4 9]]
print(np.minimum(a,b))
# [[1 7]
#  [3 6]]

4 中位数

将多个样本按大小顺序排列,居于中间位置的元素即为中位数。

numpy.median(样本)->中位数

5 标准差

数学运算

样本:S = [s1, s2, ..., sn]

算术平均值:m = (s1+s2+...+sn)/n

离差:D = [s1-m, s2-m, ..., sn-m]

离差方:Q = [(s1-m)^2, (s2-m)^2, ..., (sn-m)^2]

方差:((s1-m)^2+(s2-m)^2+...+(sn-m)^2)/n

标准差:sqrt(((s1-m)^2+(s2-m)^2+...+(sn-m)^2)/n)

numpy函数

numpy.std(S, ddof=非*样本数)

总体标准差:sqrt(.../n)

样本标准差:sqrt(.../(n-1))

6 元素选取

1) take + where + 掩码

2) [ ] + where+掩码

3) [ ] + 掩码

根据星期统计平均价格

import datetime as dt
import numpy as np


def dmy2wday(dmy):
    dmy = str(dmy, encoding='utf-8')
    date = dt.datetime.strptime(dmy, '%d-%m-%Y').date()
    wday = date.weekday()  # 用0到4表示星期一到星期五
    return wday

wdays, closing_prices = np.loadtxt(
    './aapl.csv', delimiter=',',
    usecols=(1, 6), unpack=True, converters={1: dmy2wday})
ave_closing_prices = np.zeros(5)
# ave_closing_prices.size = 5
for wday in range(ave_closing_prices.size):
    '''
    # 通过take函数从数组中提取与特定下标集合相对应的元素
    ave_closing_prices[wday] = np.take(closing_prices, np.where(wdays == wday)).mean()
    # 通过下标运算符根据特定下标集合选取相对应的元素
    ave_closing_prices[wday] = closing_prices[np.where(wdays == wday)].mean()
    '''
    # 通过下标运算符根据特定掩码数组选取与真值相对应的元素
    ave_closing_prices[wday] = closing_prices[ wdays == wday].mean()
for wday, ave_closing_price in zip(
        ['MON', 'TUE', 'WED', 'THU', 'FRI'], ave_closing_prices):
    print(wday, np.round(ave_closing_price, 2))

运算

MON 351.79
TUE 350.64
WED 352.14
THU 350.9
FRI 350.02

7 轴向扩展

apply_along_axis(函数, 轴向, 参数数组) -> 数组

沿着参数数组的指定轴向向给定函数传递参数,并将其所返回的数组同样沿着指定的轴向组合成一个数组返回。

import numpy as np

def fun(a):
    return a ** 2

a = np.array([
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]])
b = np.apply_along_axis(fun, 0, a)
print(b)
# [[ 1  4  9]
#  [16 25 36]
#  [49 64 81]]
c = np.apply_along_axis(fun, 1, a)
print(c)
# [[ 1  4  9]
#  [16 25 36]
#  [49 64 81]]