#!/usr/bin/env python
# coding: utf-8

# <h1>Table of Contents<span class="tocSkip"></span></h1>
# <div class="toc"><ul class="toc-item"><li><span><a href="#统计函数" data-toc-modified-id="统计函数-1"><span class="toc-item-num">1&nbsp;&nbsp;</span>统计函数</a></span><ul class="toc-item"><li><span><a href="#从给定数组中的元素沿指定轴返回最小值—numpy.amin()" data-toc-modified-id="从给定数组中的元素沿指定轴返回最小值—numpy.amin()-1.1"><span class="toc-item-num">1.1&nbsp;&nbsp;</span>从给定数组中的元素沿指定轴返回最小值—numpy.amin()</a></span></li><li><span><a href="#从给定数组中的元素沿指定轴返回最大值—numpy.amax()" data-toc-modified-id="从给定数组中的元素沿指定轴返回最大值—numpy.amax()-1.2"><span class="toc-item-num">1.2&nbsp;&nbsp;</span>从给定数组中的元素沿指定轴返回最大值—numpy.amax()</a></span></li><li><span><a href="#返回沿轴的值的极差(最大值---最小值)—numpy.ptp()" data-toc-modified-id="返回沿轴的值的极差(最大值---最小值)—numpy.ptp()-1.3"><span class="toc-item-num">1.3&nbsp;&nbsp;</span>返回沿轴的值的极差(最大值 - 最小值)—numpy.ptp()</a></span></li><li><span><a href="#百分位数—numpy.percentile()" data-toc-modified-id="百分位数—numpy.percentile()-1.4"><span class="toc-item-num">1.4&nbsp;&nbsp;</span>百分位数—numpy.percentile()</a></span></li><li><span><a href="#用于计算数组-a-中元素的中位数(中值)—numpy.median()" data-toc-modified-id="用于计算数组-a-中元素的中位数(中值)—numpy.median()-1.5"><span class="toc-item-num">1.5&nbsp;&nbsp;</span>用于计算数组 a 中元素的中位数(中值)—numpy.median()</a></span></li><li><span><a href="#返回数组中元素的算术平均值—numpy.mean()" data-toc-modified-id="返回数组中元素的算术平均值—numpy.mean()-1.6"><span class="toc-item-num">1.6&nbsp;&nbsp;</span>返回数组中元素的算术平均值—numpy.mean()</a></span></li><li><span><a href="#返回数组中元素的加权平均值—numpy.average()" data-toc-modified-id="返回数组中元素的加权平均值—numpy.average()-1.7"><span class="toc-item-num">1.7&nbsp;&nbsp;</span>返回数组中元素的加权平均值—numpy.average()</a></span></li><li><span><a href="#返回数组的标准差—numpy.std()" data-toc-modified-id="返回数组的标准差—numpy.std()-1.8"><span class="toc-item-num">1.8&nbsp;&nbsp;</span>返回数组的标准差—numpy.std()</a></span></li><li><span><a href="#返回数组的方差—numpy.var()" data-toc-modified-id="返回数组的方差—numpy.var()-1.9"><span class="toc-item-num">1.9&nbsp;&nbsp;</span>返回数组的方差—numpy.var()</a></span></li></ul></li><li><span><a href="#转置" data-toc-modified-id="转置-2"><span class="toc-item-num">2&nbsp;&nbsp;</span>转置</a></span></li></ul></div>

# In[2]:


import numpy as np


# In[3]:


#全部行都能输出
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"


# ## 统计函数

# NumPy有很多有用的统计函数,用于从数组中给定的元素中查找最小,最大,百分标准差和方差等。

# NumPy有很多有用的统计函数,用于从数组中给定的元素中查找最小,最大,百分标准差和方差等。    
# 
# |**常用统计函数** ||
# | ----------- | ------------------------------- |
# |numpy.amin() |从给定数组中的元素沿指定轴返回最小值|
# |numpy.amax() |从给定数组中的元素沿指定轴返回最大值|
# |numpy.ptp()  |返回沿轴的值的极差(最大值 - 最小值)|
# |numpy.percentile()|返回特定轴的百分位数|
# |numpy.median()|返回数组中值|
# |numpy.mean()|返回数组的算术平均值|
# |numpy.average()|返回数组的加权平均值|
# |numpy.std()|返回数组的标准差|
# |numpy.var()|返回数组的方差|

# ### 从给定数组中的元素沿指定轴返回最小值—numpy.amin() 

# In[4]:


a = np.array([[3,7,5],[8,4,3],[2,4,9]])
a


# In[5]:


print(np.amin(a))
print(np.amin(a,axis=0))  #返回每一列的最小值
print(np.amin(a,axis=1))  #返回每一行的最小值


# ### 从给定数组中的元素沿指定轴返回最大值—numpy.amax() 

# In[6]:


a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print(a)


# In[7]:


print(np.amax(a))
print(np.amax(a,axis=0))  #返回每一列的最大值
print(np.amax(a,axis=1))  #返回每一行的最大值


# ### 返回沿轴的值的极差(最大值 - 最小值)—numpy.ptp()

# In[8]:


a = np.array([[3,7,5],[8,4,3],[2,4,9]])
print(a)


# In[9]:


print(np.ptp(a))     #返回整个数组的极差
print(np.ptp(a, 0))  #返回每一列的极差
print(np.ptp(a, 1))  #返回每一行的极差


# ### 百分位数—numpy.percentile()

# - 百分位数是统计中使用的度量,表示小于这个值得观察值占某个百分比。
# - 函数numpy.percentile() 接受以下参数。numpy.percentile(a, q, axis)

# - a 输入数组
# - q 要计算的百分位数,在 0 ~ 100 之间
# - axis 沿着它计算百分位数的轴

# In[10]:


a = np.array([[30,40,70],[80,20,10],[50,90,60]])
print(a)


# In[11]:


print(np.percentile(a,50))
print(np.percentile(a,50, axis = 0))  #按行
print(np.percentile(a,50, axis = 1))  #按列


# ### 用于计算数组 a 中元素的中位数(中值)—numpy.median()

# 中值定义为将数据样本的上半部分与下半部分分开的值

# In[12]:


a = np.array([[30,65,70],[80,95,10],[50,90,60]])
print(a)


# In[13]:


print(np.median(a))
print(np.median(a, axis = 0))  #按列
print(np.median(a, axis = 1))  #按行


# ### 返回数组中元素的算术平均值—numpy.mean()

# 算术平均值是沿轴的元素的总和除以元素的数量。函数返回数组中元素的算术平均值。如果提供了轴,则沿其计算。

# In[14]:


a = np.array([[1,2,3],[3,4,5],[4,5,6]])
print(a)


# In[15]:


print(np.mean(a))
print(np.mean(a, axis = 0))  #按列
print(np.mean(a, axis = 1))  #按行


# ### 返回数组中元素的加权平均值—numpy.average()

# - 加权平均值是由每个分量乘以反映其重要性的因子得到的平均值。
# - 函数根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值。
# - 该函数可以接受一个轴参数。如果没有指定轴,则数组会被展开。     
# - 考虑数组 [1,2,3,4] 和相应的权重 [4,3,2,1] ,通过将相应元素的乘积相加,并将和除以权重的和,来计算加权平均值。    
# - 加权平均值 = `(1*4+2*3+3*2+4*1)/(4+3+2+1)`

# In[16]:


a = np.array([1,2,3,4])
print(a)


# In[17]:


#不指定权重时相当于 mean 函数
print(np.average(a))


# In[18]:


wts = np.array([4,3,2,1])
print(np.average(a,weights = wts))


# In[19]:


#如果 returned 参数设为 true,则会返回权重的和
print(np.average([1,2,3,4],weights=[4,3,2,1], returned=True))


# ### 返回数组的标准差—numpy.std()

# 标准差是与均值的偏差的平方的平均值的平方根。标准差公式如下: std = sqrt(mean((x - x.mean())**2))

# In[20]:


print(np.std([1,2,3,4]))


# ### 返回数组的方差—numpy.var()

# 方差是偏差的平方的平均值,即mean((x - x.mean())** 2)。换句话说,标准差是方差的平方根。

# In[21]:


print(np.var([1,2,3,4]))


# ## 转置

# Numpy 的转置可以按照你的需要对数组的轴进行转换。

# In[32]:


arr = np.arange(15).reshape((3, 5))
print(arr)


# In[33]:


print(arr.T)


# In[41]:


arr


#  - 需要注意的是,转置只能发生在二维及以上的维度的数组上生效,一维的数组只有一个维度是
#  - 不可以转置的。
#  - 一维的怎么办?np.reshape(1,-1)变成二维,再转置

# In[34]:


a = np.arange(7)
a.shape
a.ndim
a


# In[35]:


a.T


# In[36]:


b = a.reshape(1,-1)   #变二维
b


# In[37]:


b.T


# In[38]:


a.shape


# In[39]:


a.reshape(7,1)   #也可以直接reshape


# In[ ]: