• 【MindSpore易点通】数据处理之NumPy练习--中级篇


    NumPy使用--中级练习

    简述:人类早期驯服NumPy的第二篇来了,本篇内容中是用NumPy解决一些较为复杂的问题,直接上干货。

    1.获取2022年6月的所有日期

    1. import numpy as np
    2. cx = np.arange('2022-06','2022-07',dtype = 'datetime64[D]')
    3. print(cx)
    复制

    2.避免复制操作来计算((A+B)*(-A/2))

    1. import numpy as np
    2. A = np.ones(3)*1
    3. B = np.ones(3)*2
    4. print(np.multiply(np.add(A,B,out=B), np.negative(np.divide(A,2,out=A),out=A), out=A)) # 使用add()得到(A+B),使用divide()得到-A,使用negative()得到(-A/2),使用multiply()得到((A+B)*(-A/2))
    复制

    3.用五种方法抽取随机矩阵的整数部分

    1. import numpy as np
    2. cx = np.random.uniform(0,10,(10,10))
    3. print(cx-cx%1)
    4. print (np.floor(cx))
    5. print (np.ceil(cx)-1)
    6. print (cx.astype(int))
    7. print (np.trunc(cx))
    复制

    4.创建一个5x5每行为0到4的矩阵

    1. import numpy as np
    2. print(np.tile(np.arange(5), (5, 1))) # tile()将np.arange(5)当作元素重新组成新矩阵
    复制

    5.使用生成器创建一个大小为10的数组

    1. import numpy as np
    2. def generate():
    3. for x in range(10):
    4. yield x
    5. cx = np.fromiter(generate(),dtype=float)
    6. print(cx)
    复制

    6.创建一个大小为10的数组,值为0到1之间,不包含0和1

    1. import numpy as np
    2. print(np.linspace(0, 1, 11, False)[1:]) # 先使用linspace()创建,再切片去掉首尾的01
    复制

    7.创建一个大小为10的数组并排序

    1. import numpy as np
    2. cx = np.random.random(10)
    3. cx.sort() # 使用sort()从小到大排序
    4. print(cx)
    复制

    8.对一个小数组用比np.sum快的方法求和

    1. import numpy as np
    2. print(np.add.reduce(np.arange(34))) # 使用add.reduce()
    复制

    9.比较两个随机数组是否相等

    1. import numpy as np
    2. cx = np.random.randint(0,3,4)
    3. cl = np.random.randint(0,3,4)
    4. print(np.allclose(cx,cl)) # 比较两个数组中的每个元素
    5. print(np.array_equal(cx,cl)) # 比较两个整的数组
    复制

    10.创建一个不可变数组

    1. import numpy as np
    2. cx = np.ones(10)
    3. cx.flags.writeable = False # 重置flags.writeable
    复制

    11.创建一个大小为10x2的矩阵来代表笛卡儿坐标,并转为极坐标

    1. import numpy as np
    2. cx = np.random.random((10,2))
    3. X,Y = cx[:,0], cx[:,1] # 切分为两个
    4. R = np.sqrt(X**2+Y**2) # 计算开放
    5. T = np.arctan2(Y,X)
    6. print(R)
    7. print(T)
    复制

    12.创建一个大小为10的数组并把最大值设为0

    1. import numpy as np
    2. cx = np.random.random(10)
    3. cx[cx.argmax()] = 0 # 找到最大值并修改为0
    4. print(cx)
    复制

    13.创建一个xy的数组结构,包含[0,1]x[0,1]区域

    1. import numpy as np
    2. cx = np.zeros((5,5), [('x',float),('y',float)])
    3. cx['x'], cx['y'] = np.meshgrid(np.linspace(0,1,5),
    4. np.linspace(0,1,5))
    5. print(cx)
    复制

    14.给定array X 和 Y, 构造柯西矩阵C(Cij = 1 /(xi-yj))

    1. import numpy as np
    2. cx = np.arange(4)
    3. cl = cx + 0.5
    4. cxl = 1.0 / np.subtract.outer(cx, cl)
    5. print(np.linalg.det(cxl))
    复制

    15.显示机器能处理的数值的范围

    1. import numpy as np
    2. print(np.iinfo(np.int64))
    3. print(np.iinfo(np.int32))
    4. print(np.iinfo(np.uint16))
    5. print(np.finfo(np.float64))
    6. print(np.finfo(np.float16))
    复制

    16.显示array中所有的值

    1. import numpy as np
    2. np.set_printoptions(threshold=1) #可以用...代替中间值
    3. Z = np.zeros((26,26))
    4. print(Z)
    复制

    17.如何在向量中找到指定范围的最近值

    1. import numpy as np
    2. cx = np.arange(100)
    3. cl = np.random.uniform(0,100)
    4. index = (np.abs(cx-cl)).argmin() # 找到差值最小的下标
    5. print(cx[index])
    复制

    18.构建一个代表位置 (x,y) 和 颜色 (r,g,b)的矩阵

    1. import numpy as np
    2. mydtype = np.dtype([('xy',[('x', np.int64), ('y', np.int64)]), ('color',[('r', np.int16), ('g', np.int16), ('b', np.int16)])])
    3. print(np.ones((3, 2), mydtype))
    复制

    19.用一个100*2的随机向量来表示坐标,计算点到点的距离

    1. import numpy as np
    2. cx = np.random.random((100,2))
    3. X,Y = np.atleast_2d(cx[:,0], cx[:,1]) # 切分矩阵形成向量
    4. cl = np.sqrt( (X-X.T)**2 + (Y-Y.T)**2) # 计算距离
    5. print(cl)
    复制

    20.如何把一个浮点数组(int32)直接转换为整数(int32)

    1. import numpy as np
    2. cx = np.random.rand(20)*10
    3. print(cx.astype(np.int32)) # 使用astype()直接转
    复制

    21.从文本文件中读取数据

    1. import numpy as np
    2. from io import StringIO
    3. s = StringIO(""" , , 3, 4, 5\n
    4. 6, , , 7, 8\n
    5. , , 9,10,11\n""") # 模拟.txt文件
    6. print(np.genfromtxt(s,delimiter=','))
    复制

    22.矩阵的坐标

    1. import numpy as np
    2. cx = np.arange(9).reshape(3,3)
    3. for index in np.ndindex(cx.shape): # 循环获取坐标和下标
    4. print (index, cx[index])
    复制

    23.生成二维高斯分布

    1. import numpy as np
    2. X,Y = np.meshgrid(np.linspace(-1,1,10),np.linspace(-1,1,10))
    3. D =np.sqrt((X*X+Y*Y))
    4. sigma, mu = 1.0, 0.0
    5. G = np.exp(-((D-mu)**2 / (2.0 * sigma**2)))
    复制

    24.将元素P随机的放入二维数组中

    1. import numpy as np
    2. n = 6
    3. p = 34
    4. cx = np.zeros((n,n))
    5. np.put(cx, np.random.choice(range(n*n), p, replace=False),1)
    6. print (cx)
    复制

    25.矩阵的第一行减去算术平均值

    1. import numpy as np
    2. X = np.random.rand(3, 4)
    3. Y = X - X.mean(axis=1, keepdims=True) # 实现减去平均值
    4. print(Y)
    复制

    26.把数组按第n列排序

    1. import numpy as np
    2. cx = np.random.randint(0, 9, (3, 4))
    3. print(cx)
    4. print(np.sort(cx, axis=0)) # 全部都排序
    5. print(np.argsort(cx, axis=0)) # 给出的是索引顺序
    6. print(cx[cx[:, 1].argsort()]) # 按第二列排序
    复制

    27.如何判断一个二维数组有全为0的列

    1. import numpy as np
    2. cx = np.random.randint(0,3,(3,4))
    3. print ((~cx.any(axis=0)).any()) # axis=0锁定每一列,any() 函数用于判断是否全部是0
    复制

    28.从数组中找出给定值的最近似值

    1. import numpy as np
    2. cx = np.random.uniform(0,1,10)
    3. cl = 0.5
    4. cxl = cx.flat[np.abs(cx - cl).argmin()] # 利用差值找到最近似的元素
    5. print(cxl)
    复制

    29.使用迭代器计算1x3和3x1的数组的和

    1. import numpy as np
    2. A = np.arange(3).reshape(3, 1)
    3. B = np.arange(3).reshape(1, 3)
    4. cx = np.nditer([A, B, None]) # 多维数组的迭代
    5. for x, y, z in cx:
    6. z[...] = x + y
    7. print(cx.operands[2])
    复制

    30.创建一个有名字的数组类

    1. import numpy as np
    2. class NamedArray(np.ndarray):
    3. def __new__(cls, array, name="no name"):
    4. obj = np.asarray(array).view(cls)
    5. obj.name = name
    6. return obj
    7. def __array_finalize__(self, obj):
    8. if obj is None: return
    9. self.info = getattr(obj, 'name', "no name")
    10. cx = NamedArray(np.arange(34), "range_34")
    11. print(cx.name)
    复制

    31.对一个给定数组,如何按第二个数组表示的索引位置将对应的元素+1,注意重复的位置要重复加1

    1. import numpy as np
    2. cx = np.ones(10)
    3. cl = np.random.randint(0,len(cx),10)
    4. np.add.at(cx, cl, 1)
    5. print(cx)
    复制

    32.如何基于索引列表I,将向量X的各元素累加到数组F上

    1. import numpy as np
    2. cx = [1,2,3,4,5,6]
    3. cl = [8,9,4,5,6,7]
    4. cxl = np.bincount(cl,cx)
    5. print(cxl)
    复制

    33.对一个(w,h,3)表示的图像,如何计算不重复的颜色

    1. import numpy as np
    2. w,h = 16,16
    3. cx = np.random.randint(0,2,(h,w,3)).astype(np.ubyte)
    4. cl = cx[...,0]*256*256 + cx[...,1]*256 +cx[...,2]
    5. print(np.unique(cx))
    复制

    总结:以上是NumPy的中级使用的问题和解决方法,本次遇到的问题中会需要多种函数组合使用,未知函数可使用np.info()查看使用方法和功能,欢迎大家尝试或者补充更好的方法。高级篇正在准备中,还请期待~

  • 相关阅读:
    NX二次开发UF_CAM_ask_cutter_db_object 函数介绍
    动态规划PTA总结
    计算机网络
    从面试官角度谈谈面试常见问题,求职者注意避坑!
    [附源码]java毕业设计疫情防控下高校教职工健康信息管理系统
    技术开发人员常用的安全浏览器
    14.MongoDB导出备份
    idea启动Tomcat时控制台出现乱码的解决(亲测有效)
    Optuna学习博客
    RCD负载箱的优势和特点与其他负载箱有何区别?
  • 原文地址:https://blog.csdn.net/weixin_45666880/article/details/126777596