Numpy 基本用法

# encoding=utf-8
import numpy as np

x = []
#欧几里得距离
def distance_betwin_p(p1,p2):
    np.sqrt((p1[0] - p2[0]) * (p1[0] - p2[0]) + (p1[1] - p2[1]) ** 2)

#创建一个指定行列的数组,默认值是0或者正无穷或负无穷 ∞
np.empty((3,4))

#科学计数法的读法
1.23e3  #1.23x10的三次方
1.23e-3 #1.23x10负三次方

#实数在计算机里没有对应表示,只能用浮点数无限逼近。所以在处理和0比较的时候要格外小心
#a - b < 0.1e-10 例如相减的时候当结果小于一个极小的数值就认为相等

#矢量是有方向和长度的变量,可以用numpy的多维数组来表示,二维矢量就是平面的一个点


#计算矢量X的范数(长度)
np.linalg.norm(x)
#计算矢量的角度
d = np.arctan(3.0/3.0)
#将弧度转化为角度
np.rad2deg(d) #np.deg2rad()将角度转化为弧度
#向b1方向移动,再向b2方向移动
b1 = np.array([3,0])
b2 = np.array([0,3])
np.linalg.norm(b1 + b2)
#使用两个矢量相减,可以计算两点之间的距离
d1 = np.array([2,7])
d2 = np.array([8,3])
np.linalg.norm(d1 - d2)

#余弦相似度,向量的内积,对应元素想乘,再相加
costheta = d1.dot(d2)/(np.linalg.norm(d1) * np.linalg.norm(d2))

#numpy数组(矢量)默认的+ - x /操作都是对应位置的元素相操作
#-3x**2+5x-6

#TypeError: unsupported operand type(s) for -: 'list' and 'list'

#在X轴上生成20000个从-10000到10000的离散点
#使用矢量计算直接生成多项式-3x**2+5x-6的所有计算结果,注意这里没有使用循环,一次计算了20000个结果
X = np.linspace(-10000,10000,20000)
Y = (X ** 2) * -3 + 5 * X - 6 #矢量运算,计算机会加速此类运算
Y.max()#获取当前矢量中的最大值
Y.argmax()#获取当前数组最大值对应的索引
np.nan #not a number 当数据读取缺失或计算异常时会出现,本质是一个浮点数
np.inf #无穷大
np.exp(10)#以e为底的指数
np.log(10)#对数
np.sin(10)#三角函数
np.sqrt(10)#开方
X.astype(np.int)#将数组类型强制转换为int
X.shape #返回X数组的行列数
n_array = np.array([[1,2,3,4,5],[6,7,8,9,0],[3,4,5,6,7],[7,6,5,4,3],[6,8,9,2,3]])
n_array < 60 #返回满足条件的布尔类型矩阵
n_array[n_array < 60]#将a_array中小于60的数值选择出来
n_array.mean() #求平均值
n_array.std() #标准差
n_array.max() #最大值
n_array.min() #最小值
#n_array[:,1] #选择当前二维数组第二列
#n_array[1,:] #选择当前二维数组第二行
#n_array[:,:,1] #选择当前三维数组第三个维度第二列的所有内容

# def poly_test(l,r,):
#     r_len = r - l
#     max_num = -1000000
#     m_idx = l
#     for i in range(r_len):
#         r_num = l+i
#         result = (r_num ** 2) * -3 + (5* r_num) - 6
#         if result > max_num:
#             max_num = result
#             m_idx = i
#
#     return max_num,m_idx
#
# print poly_test(-10000,10000)

my_matrix = np.loadtxt(open("score.csv","rb"),delimiter=",")
#my_matrix = np.genfromtxt("score.csv",delimiter=",")

#该班级哪门课程成绩最好
#该班哪个同学成绩最好
#该班哪个同学偏科最严重
#该班哪门主课成绩最好
#该班主课和副课对比哪个成绩好
#这个班有多少学生出现了不及格

name_dic = {0:"数学",1:"语文",2:"化学",3:"地理",4:"音乐",5:"体育"}


class CoursaDesc(object):
    def __init__(self):
        self.name = ""
        self.std  = 0
        self.max  = 0
        self.mean = 0
        self.min  = 0
        self.sum  = 0


class ComputerDesc(object):
    def __init__(self,n_array):
        self.score_array = n_array
        self.result = []

    def counter_all_coursa(self):
        for i in range(6):
            c_desc =  CoursaDesc()
            c_desc.name = name_dic[i]
            c_desc.std  = self.score_array[:,i].std()
            c_desc.mean = self.score_array[:,i].mean()
            c_desc.max  = self.score_array[:,i].max()
            c_desc.min  = self.score_array[:,i].min()
            c_desc.sum  = self.score_array[:,i].sum()
            self.result.append(c_desc)


    def best_coursa(self):
        # std_list = [coursa.std for coursa in self.result]
        # sum_list = [coursa.sum for coursa in self.result]
        std_list = []
        sum_list = []
        for coursa in self.result:
            std_list.append(coursa.std)
            sum_list.append(coursa.sum)

        std_array = np.array(std_list)
        sum_array = np.array(sum_list)

        #总和最大的单项成绩,例如:数学成绩的max_sum_coursa也就是总和是701
        max_sum_coursa = sum_array.max()
        max_sum_index = sum_array.argmax()#数学成绩总和的索引,例如是0

        #方差最小的单项成绩,例如:体育成绩的min_std_coursa也就是方差是30
        min_std_coursa = std_array.min()
        min_std_index  = std_array.argmin()#方差最小成绩的索引,例如是6

        if max_sum_index == min_std_index:
            return name_dic[max_sum_index]
        else:
             #总和最大课程的方差取出
             max_sum_coursa_std = std_array[max_sum_index]
             #方差最小课程的总和取出
             min_std_soursa_sum = sum_array[min_std_index]

             sum_delta = max_sum_coursa - min_std_soursa_sum
             std_delta = max_sum_coursa_std - min_std_coursa

             sum_percent = sum_delta / max_sum_coursa
             std_percent = std_delta / min_std_coursa

             if sum_percent < 0.05 and std_percent > 0.2:
                 return name_dic[min_std_index]

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
NumPy(Numerical Python)是Python科学计算的核心库之一,它提供了高性能的多维数组对象(ndarray)以及相应的函数库。下面是NumPy基本用法和使用案例: 1. 导入NumPy库: ```python import numpy as np ``` 2. 创建数组: ```python # 通过列表创建一维数组 arr1 = np.array([1, 2, 3, 4, 5]) # 通过列表创建二维数组 arr2 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # 创建全零数组 zeros_arr = np.zeros((3, 4)) # 创建全一数组 ones_arr = np.ones((2, 3)) # 创建指定范围的等差数组 range_arr = np.arange(0, 10, 2) # 创建随机数数组 random_arr = np.random.rand(3, 3) ``` 3. 数组属性和操作: ```python # 查看数组的形状 shape = arr2.shape # 查看数组的维度 ndim = arr2.ndim # 查看数组的数据类型 dtype = arr2.dtype # 访问数组元素 element = arr2[0, 1] # 切片操作 sliced_arr = arr1[1:4] # 数组形状变换 reshaped_arr = arr2.reshape((9,)) # 数组转置 transposed_arr = arr2.T # 数组的基本运算 result = arr1 + arr2 ``` 4. 数组的统计操作: ```python # 计算数组的平均值 mean_value = np.mean(arr2) # 计算数组的标准差 std_value = np.std(arr2) # 计算数组的最大值 max_value = np.max(arr2) # 计算数组的最小值 min_value = np.min(arr2) # 计算数组的和 sum_value = np.sum(arr2) ``` 这些只是NumPy的一些基本用法和使用案例,NumPy还提供了更多强大的功能,包括数学函数、线性代数运算、傅里叶变换等。可以通过NumPy官方文档进行更详细的学习和了解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值