• [开发环境] 时出现TypeError: 'numpy.float64' cannot be interpr...报错
    【功能模块】numpy【操作步骤&问题现象】1、就在“开发环境“里的notebook里面运行了eval.py并且一开始非常顺利,但突然就报了有关numpy的错误2、经百度该问题有可能是numpy版本太高所导致的,共有两种解决方法:第一种方法是numpy版本降级,可是降级后发现其他高级一点的功能又用不了了,又会报错;第二种方法是在cocoeval.py下改几行代码内容(将SetDetParams()函数下的某些变量改一下),但是当我尝试着进入以下路径去改代码,发现在terminal端没有办法进入cocoeval.py里改代码,是因为用户只能进入work文件夹而miniconda3文件夹进不去?(非常想知道有什么办法可以查看并进入miniconda3文件夹修改代码内容)
  • [执行问题] mindspore的tensor与numpy数据类型转换
    1、如果mindspore的requires_grad=False的Tensor转化为numpy类型进行处理然后再转化会Tensor,会对计算图和反向传播有影响吗?2、如果Tensor的requires_grad=True进行numpy类型转化再转换回Tensor会对计算图和反向传播有影响吗?
  • [技术干货] NumPy数组入门
    前言这个暑假即将开始MindSpore框架的学习,而深度学习中所提到的张量和numpy息息相关,这一篇小小的笔记,就当作深度学习前的预备知识之一吧~文章有点长,读者可取自己所需部分进行阅读~GitHub上是我的一些学习记录,欢迎踩踩~一、Numpy数组基础ndarray是一种多维的数组对象shape(表示各维度大小的元组)dtype(用于说明数组数据类型的对象)创建ndarray 接受一切序列型的对象 arr = np.array([…])嵌套就转化为多维数组arr.ndim 数组维度arr.shape 数组形状arr.size 数组的大小1.1 从头创建数组import numpy as np1np.zeros(10, dtype=int)1array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])1np.ones((3,5),dtype=float)1array([[1., 1., 1., 1., 1.],       [1., 1., 1., 1., 1.],       [1., 1., 1., 1., 1.]])np.full((3,5),3.14)1array([[3.14, 3.14, 3.14, 3.14, 3.14],       [3.14, 3.14, 3.14, 3.14, 3.14],       [3.14, 3.14, 3.14, 3.14, 3.14]])创建一个线性序列的数组0开始 20结束 步长为2np.arange(0,20,2)1array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])1创建一个5个元素的数组,这5个数均匀分布到0~1np.linspace(0,1,5)1array([0.  , 0.25, 0.5 , 0.75, 1.  ])1创建一个(3,3),在0-1之间均匀分布的随机数组np.random.random((3,3))1array([[0.99343462, 0.47173144, 0.38334297],       [0.38642939, 0.50745929, 0.00122697],       [0.2524901 , 0.42000919, 0.11096582]])1创建一个(3,3),均值为0的标准差为1的正态分布的随机数组np.random.normal(0,1,(3,3))1array([[ 1.1119363 ,  0.12037831, -0.09112545],       [ 0.0207521 , -2.74302458,  0.79069395],       [-1.46528679, -1.02243523, -0.37781983]])1创建一个(3,3),[0,10) 区间的的随机整型数组np.random.randint(0,10,(3,3))1array([[8, 1, 6],       [3, 3, 0],       [7, 6, 1]])1创建(3,3)单位矩阵np.eye(3)1array([[1., 0., 0.],       [0., 1., 0.],       [0., 0., 1.]])1创建一个由3个整型数组组成的未初始化的数组np.empty(3)1array([1., 1., 1.])11.2 数组索引numpy数组是固定的,插入浮点值到整型数组直接截断1.3 数组切片x[start:stop:step]注意哦,这个不是副本,而是直接在原来的数组上修改~# 例如逆序x = np.arange(10)x[::-1]1array([9, 8, 7, 6, 5, 4, 3, 2, 1, 0])1多维子数组x2 = [[12,5,2,4],[7,6,8,8],[1,6,7,7]]1x2 = np.array(x2)x2array([[12,  5,  2,  4],       [ 7,  6,  8,  8],       [ 1,  6,  7,  7]])# 两行三列x2[:2,:3]array([[12,  5,  2],       [ 7,  6,  8]])# 所有行,每隔一列x2[:3,::2]array([[12,  2],       [ 7,  8],       [ 1,  7]])# 子数组逆序x2[::-1,::-1]array([[ 7,  7,  6,  1],       [ 8,  8,  6,  7],       [ 4,  2,  5, 12]])获取行和列x2[:,0]1array([12,  7,  1])1x2[0,:]1array([12,  5,  2,  4])1x2[0]1array([12,  5,  2,  4])1创建副本arr.copy()#####1.4 数组变形一般是一维数组转变为二维数组的行或列的矩阵x=np.array([1,2,3])1x.reshape((1,3))1array([[1, 2, 3]])1# 转变为列向量x.reshape((3,1))array([[1],       [2],       [3]])# 利用关键字newaxisx[np.newaxis,:]array([[1, 2, 3]])1x[:,np.newaxis]1array([[1],       [2],       [3]])1.5 数组拼接和分裂 #  数组拼接x = np.array([1,2,3])y = np.array([4,4,3])y = np.concatenate([x,y])yarray([1, 2, 3, 4, 4, 3])1# 二维数组的拼接gris = np.array([[1,3,4],[5,6,7]])np.concatenate([gris,gris])1array([[1, 3, 4],       [5, 6, 7],       [1, 3, 4],       [5, 6, 7]])np.concatenate([gris,gris],axis=1)1array([[1, 3, 4, 1, 3, 4],       [5, 6, 7, 5, 6, 7]])np.vstack(垂直栈)np.hstack(水平栈)x=np.array([1,2,3])xarray([1, 2, 3])1grid = np.array([[9,8,7],[6,5,4]])1np.vstack([x,grid])1array([[1, 2, 3],       [9, 8, 7],       [6, 5, 4]])y=np.array([[99],[99]])np.hstack([grid,y])array([[ 9,  8,  7, 99],       [ 6,  5,  4, 99]])数组的分裂索引列表作为参数,索引列表记录的是分裂点位置x= [1,2,3,99,99,3,2,1]1x1,x2,x3=np.split(x,[3,5])x1array([1, 2, 3])1N分裂点会得到N+1个子数组grid = np.arange(16).reshape((4,4))1grid1array([[ 0,  1,  2,  3],       [ 4,  5,  6,  7],       [ 8,  9, 10, 11],       [12, 13, 14, 15]])upper,lower = np.vsplit(grid,[2])1upper1array([[0, 1, 2, 3],       [4, 5, 6, 7]])lower1array([[ 8,  9, 10, 11],       [12, 13, 14, 15]])left,right = np.hsplit(grid,[2])1left1array([[ 0,  1],       [ 4,  5],       [ 8,  9],       [12, 13]])right1array([[ 2,  3],       [ 6,  7],       [10, 11],       [14, 15]])二、Numpy数组的计算:通用函数使Numpy变快的关键是利用向量化的操作2.1 绝对值np.absolute()==np.abs()处理复数,绝对值返回的是该复数的模2.2 三角函数np.linspace(0, np.pi, 3)—>0到Π之间均匀分布,3个元素theta = np.linspace(0, np.pi, 3)1np.sin(theta)1array([0.0000000e+00, 1.0000000e+00, 1.2246468e-16])12.3 指数和对数np.exp(x)np.power(3,x)给出的是以自然常数(e)为底数的对数,ln(x)=np.log(x)以2为底,log2(x)=np.log2(x)2.4 专用的通用函数Gamma函数(广义阶乘)from scipy import special1x=[1,5,10]1special.gamma(x)1array([1.0000e+00, 2.4000e+01, 3.6288e+05])1special.gammaln(x)1array([ 0.        ,  3.17805383, 12.80182748])12.5 误差函数(高斯积分)x=np.array([0,0.3,0.7,1.0])1special.erf(x)1array([0.        , 0.32862676, 0.67780119, 0.84270079])1special.erfinv(x)1array([0.        , 0.27246271, 0.73286908,        inf])1三、高级的通用函数3.1 指定输出大量运算的时候,有时候指定一个用于存放结果的数组直接存入希望存入的位置x= np.arange(5)1y=np.empty(5)1np.multiply(x,10,out=y)1array([ 0., 10., 20., 30., 40.])1y=np.zeros(10)yarray([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])1np.power(2,x,out=y[::2])1array([ 1.,  2.,  4.,  8., 16.])13.2 聚合# 对add使用reduce方法返回数组中所有元素的和x=np.arange(1,6)12np.add.reduce(x)1151np.multiply.reduce(x)11201# 存储每次计算的中间结果np.add.accumulate(x)array([ 1,  3,  6, 10, 15], dtype=int32)1# 外积np.multiply.outer(x,x)array([[ 1,  2,  3,  4,  5],       [ 2,  4,  6,  8, 10],       [ 3,  6,  9, 12, 15],       [ 4,  8, 12, 16, 20],       [ 5, 10, 15, 20, 25]])最大值最小值求和arr.sum()arr.min()arr.max()默认情况下只返回单个元素但是可以设定参数返回每个序列每一列最小值:arr.min(axis=0)每一行最小值:arr.min(axis=1)计算元素的乘积np.nanprod()—nan指忽略缺失值np.nanstd()计算标准差np.nanvar()计算方差np.nanargmin()找出最小值索引np.nanmedian()计算中位数3.3 数组的计算广播的介绍只有达到相同形状最终才可以进行计算但是如果两个数组维度均不一样,且没有维度为1的,则不能进行计算操作布尔数组x=[[5,0,3,3],  [7,9,3,5],  [2,4,7,6]]np.count_nonzero(np.less(x,6))np.sum(np.less(x,6),axis=1)array([4, 2, 2])1快速检查元素np.any()np.all()四、花哨的索引# 传递索引的单个列表或者数组来获得同样的结果# 结果形状与索引数组一致x=np.arange(12).reshape((3,4))xarray([[ 0,  1,  2,  3],       [ 4,  5,  6,  7],       [ 8,  9, 10, 11]])row = np.array([0,1,2])row12array([0, 1, 2])1col = np.array([2,1,3])col12array([2, 1, 3])1x[row,col]1array([ 2,  5, 11])1其实这里第一个值是x[0,2],x[1,1],x[2,3]五、NumPy排序# 快速排序x=np.array([2,1,4,3,5])# 不修改原数组np.sort(x)x# 修改原数组x.sort()xarray([1, 2, 3, 4, 5])1# 返回原数组排好序的索引值x=np.array([2,1,4,3,5])i=np.argsort(x)iarray([1, 0, 3, 2, 4], dtype=int64)1沿着行或者列排序np.sort(x,axis=0)np.sort(x,axis=1)部分排序,分隔比如k个最近邻x=np.array([7,2,3,1,6,5,4])1np.partition(x,3)1array([2, 1, 3, 4, 6, 5, 7])1呼~这是自己的第一篇博客~谢谢您的阅读鸭~————————————————原文链接:https://blog.csdn.net/fangqi100/article/details/119452503
  • [Atlas500] 【500产品】在小站内使用pip install numpy出现这种报错
    出现这种问题是因为小站没有连接外网没?
  • [问题求助] pip3.7.5 install attrs numpy decorator sympy==1.4 安装失败
    hwhiaiuser@hwhiaiuser-virtual-machine:~/ascend/download/Python-3.7.5$ pip3.7.5 install attrs numpy decorator sympy==1.4 cffi==1.12.3 pyyaml pathlib2 psutil protobuf scipy requests xlrd==1.2.0 --userTraceback (most recent call last):  File "/usr/local/python3.7.5/bin/pip3.7.5", line 6, in <module>    from pip._internal import main  File "/usr/local/python3.7.5/lib/python3.7/site-packages/pip/_internal/__init__.py", line 19, in <module>    from pip._vendor.urllib3.exceptions import DependencyWarning  File "/usr/local/python3.7.5/lib/python3.7/site-packages/pip/_vendor/urllib3/__init__.py", line 7, in <module>    from .connectionpool import (  File "/usr/local/python3.7.5/lib/python3.7/site-packages/pip/_vendor/urllib3/connectionpool.py", line 7, in <module>    from socket import error as SocketError, timeout as SocketTimeout  File "/usr/local/python3.7.5/lib/python3.7/socket.py", line 52, in <module>    import os, sys, io, selectors  File "/usr/local/python3.7.5/lib/python3.7/selectors.py", line 11, in <module>    import math  File "/home/hwhiaiuser/Ascend/ascend-toolkit/latest/atc/python/site-packages/topi/math.py", line 20, in <module>    import tvm  File "/home/hwhiaiuser/Ascend/ascend-toolkit/latest/atc/python/site-packages/te/tvm/__init__.py", line 27, in <module>    from . import tensor  File "/home/hwhiaiuser/Ascend/ascend-toolkit/latest/atc/python/site-packages/te/tvm/tensor.py", line 20, in <module>    from ._ffi.node import NodeBase, NodeGeneric, register_node, convert_to_node  File "/home/hwhiaiuser/Ascend/ascend-toolkit/latest/atc/python/site-packages/te/tvm/_ffi/node.py", line 24, in <module>    from .object import Object, register_object, _set_class_node  File "/home/hwhiaiuser/Ascend/ascend-toolkit/latest/atc/python/site-packages/te/tvm/_ffi/object.py", line 23, in <module>    from .base import _FFI_MODE, _RUNTIME_ONLY, check_call, _LIB, c_str  File "/home/hwhiaiuser/Ascend/ascend-toolkit/latest/atc/python/site-packages/te/tvm/_ffi/base.py", line 25, in <module>    import numpy as np  File "/home/hwhiaiuser/.local/lib/python3.7/site-packages/numpy/__init__.py", line 142, in <module>    from . import core  File "/home/hwhiaiuser/.local/lib/python3.7/site-packages/numpy/core/__init__.py", line 100, in <module>    from . import _internal  File "/home/hwhiaiuser/.local/lib/python3.7/site-packages/numpy/core/_internal.py", line 11, in <module>    import platform  File "/home/hwhiaiuser/Ascend/ascend-toolkit/latest/atc/python/site-packages/te/platform/__init__.py", line 39, in <module>    import platform  File "/usr/local/python3.7.5/lib/python3.7/platform.py", line 116, in <module>    import sys, os, re, subprocess  File "/usr/local/python3.7.5/lib/python3.7/subprocess.py", line 168, in <module>    _PopenSelector = selectors.SelectSelectorAttributeError: module 'selectors' has no attribute 'SelectSelector'
  • [算子编译] mindspore.numpy如何修改数值
    【功能模块】运行如下代码:运行结果ops.zeros和mindspore.numpy.zeros运行结果是一样的,都无法通过赋值的方式改变元素值,想知道该如何修改里面的某个元素值?【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [技术干货] 深度学习框架 PyTorch vs MindSpore (一): 二者的Tensor操作方法,以及与NumPy的转换
    一、torch.Tensor1、torch.Tensor 的基本用法torch.Tensor 默认数据类型是 float32torch.LongTensor 默认数据类型是 int64数据类型转换:int 和 float 之间的转换可以通过 t.int() 和 t.float()实现,默认转为 int64 和 float32int 之间、float 之间的转换可以通过 a=b.type() 实现example: 假设 t 为 torch.float16 的 Tensor, t=t.type(float32) 将 float16 转为 float32 。 t=t.float32 和 t=t.torch.float32 都是错的。t.size(): 查看形状,与 t.shape 等价t.ndim: 查看维数t.numel(): 查看元素总数type(t): 查看数据结构类型,如<class ‘torch.Tensor’>t.type(): 查看Tensor的类型,如torch.FloatTensort.dtype: 查看元素数据类型example:import torchb=torch.Tensor([[1,2,3,4,5],[10,20,30,40,50]])print(b)print("b.dtype:",b.dtype)print()b=b.int()  print(b)print("b.dtype:",b.dtype)print("type:",type(b))print()print("size:",b.size())print("shape:",b.shape)print("dim:",b.ndim)print("num_element:",b.numel())print:tensor([[ 1.,  2.,  3.,  4.,  5.],        [10., 20., 30., 40., 50.]])b.dtype: torch.float32tensor([[ 1,  2,  3,  4,  5],        [10, 20, 30, 40, 50]], dtype=torch.int32)b.dtype: torch.int32type: <class 'torch.Tensor'>size: torch.Size([2, 5])shape: torch.Size([2, 5])dim: 2num_element: 10tensor ( [ [ 1, 2, 3, 4, 5 ],[10, 20, 30, 40, 50 ] ] ) 的尺寸是 2×5,而不是 1×2×5 。最外面的中括号不算在维数内,只是用于将Tensor包起来。2、(n, ) 的含义(n, )是一维张量,与 [n] 等价,表示一个有n个元素的行向量,即n×1的矩阵。example:a=torch.ones(4,)print("a: ",a)b=torch.Tensor([1,1,1,1])print("b.shape: ",b.shape)print:a:  tensor([1., 1., 1., 1.])b.shape:  torch.Size([4])可以发现,torch.ones(4,) 的形状就是 torch.Size([4])二、mindspore.Tensormindspore作为一款目前并不主流的深度学习框架,其用法也与pytorch和tensorflow有不小的差异。1、数据类型转换mindspore在网络传播的过程中对数据类型有非常严格的要求,且不会自动更改参数的数据类型,因此熟练掌握mindspore的数据类型转换以及熟知网络中每个参数的数据类型显得尤为重要。torch.Tensor 默认整数类型是 int64 , 默认浮点数类型是 float64数据类型转换可通过 mindspore.common.tensor中的 Tensor() 方法实现example:import mindspore as msfrom mindspore.common.tensor import Tensora = ms.Tensor([1])print("a.dtype: ",a.dtype)b = Tensor(a ,ms.float32)     # 数据类型转换print("b.dtype: ",b.dtype)b = Tensor(a , ms.float32) 将默认的 int64 类型转换为 float32 类型:a.dtype:  Int64b.dtype:  Float322、基本用法t.shape: 查看形状t.size: 查看元素总数(这个需要特别注意,t.size查看的不是Tensor的形状)t.ndim: 查看维数t.numel(): 查看元素总数type(t): 查看数据结构类型t.dtype: 查看元素数据类型example:import mindspore as msa=ms.Tensor([[1,2,3,4,5],[10,20,30,40,50]])print(a)print("a.dtype:",a.dtype)print("type:",type(a))print("num_element:",a.size)print("shape:",a.shape)print("dim:",a.ndim)print:[[ 1  2  3  4  5] [10 20 30 40 50]]a.dtype: Int64type: <class 'mindspore.common.tensor.Tensor'>num_element: 10shape: (2, 5)dim: 2ms.Tensor 是用小括号表示的,而不是中括号。同样,tensor ( [ [ 1, 2, 3, 4, 5 ],[10, 20, 30, 40, 50 ] ] ) 的尺寸是 2×5,而不是 1×2×5 。最外面的小括号不算在维数内,只是用于将Tensor包起来。三、不同框架Tensor之间的转换:以numpy为桥梁由于不同深度学习框架中的Tensor不能直接转换,而我们在框架迁移时又想方便的利用已有框架的Tensor进行训练。如将pytorch的代码改写为mindspore代码时,可先将torch.Tensor转为numpy,再将numpy转为mindspore.Tensor,这样就实现了Tensor类型的转换。1、torch.Tensor与numpy的转换t.numpy(): 将torch.Tensor转换为numpytorch.from_numpy(np): 将numpy转换为torch.Tensor转换之后,Tensor与numpy共享内存,对其中一个修改,另一个也会随之改变。example:import torchimport numpy as npa=torch.Tensor([[1,2,3],[10,20,30]])b=a.numpy()   # 将a转为numpy格式,ab共享内存,修改a的时候b也会随之修改print("a.type: ",type(a))print("b.type: ",type(b))c=torch.from_numpy(b)    # 将b转换为Tensor格式,ab共享内存print("c.type: ",type(c))print:a.type:  <class 'torch.Tensor'>b.type:  <class 'numpy.ndarray'>c.type:  <class 'torch.Tensor'>2、mindspore.Tensor与numpy的转换t.asnumpy(): 将ms.Tensor转换为numpymindspore.common.tensor.Tensor(np): 将numpy转换为ms.Tensor转换之后,Tensor与numpy独立,不共享内存,对其中一个修改,另一个不会随之改变。example:import mindspore as msimport numpy as npfrom mindspore.common.tensor import Tensora=ms.Tensor([[1,2,3],[10,20,30]])b=a.asnumpy()     # 将Tensor转换为numpy格式print("a.type: ",type(a))print("b.type: ",type(b))c=Tensor(b)       # 将numpy转换为Tensor格式print("c.type: ",type(c))print:a.type:  <class 'mindspore.common.tensor.Tensor'>b.type:  <class 'numpy.ndarray'>c.type:  <class 'mindspore.common.tensor.Tensor'>————————————————原文链接:https://blog.csdn.net/qq_43799400/article/details/118761926
  • [技术干货] pip3.7.5安装环境依赖onnxruntime、onnx、numpy、skl2onnx
    ## pip安装onnx,解决Could not build wheels for onnx which use PEP 517 and cannot be installed directly ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/07/105951xn0cx8hnnffahlcs.png) ### 解决办法:经过百度查得:安装onnx需要先安装依赖 ``` pip3 install numpy pip3 install protobuf sudo apt-get install protobuf-compiler libprotoc-dev pip3 install onnx pip3 install skl2onnx ``` ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/07/110212tzaryo8tsfew7uim.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202107/07/110307yirtiktytpun2mcp.png)
  • [算子编译] torch.from_numpy算子有没有对应迁移
    【功能模块】pytorch版本如下,不知道如标题所例算子有没有对应迁移video_sequence = np.array([self.transform(Image.open(frame)).numpy() for frame in clip])video_sequence = video_sequence.transpose(1, 0, 2, 3) video_sequence = torch.from_numpy(video_sequence)【操作步骤&问题现象】1、2、【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [新手课堂] Numpy用法查询笔记
    1.数据生成1.1 手写数组a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) # 一维数组b = np.array([[1, 2], [3, 4]]) #二维数组1.2 序列数组numpy.arange(start, stop, step, dtype),start默认0,step默认1c = np.arange(0, 10, 1, dtype=int)  # =np.arange(10)  [0 1 2 3 4 5 6 7 8 9]d = np.array([np.arange(1, 3), np.arange(4, 6)])  # 二维数组# 不过为了避免麻烦,通常序列二维数组都是通过reshape进行重新组织dd = c.reshape(2, 5)  # 将一维数组重新组合成2行5列1.2 随机数组numpy.random.random(size=None) 该方法返回[0.0, 1.0)范围的随机小数。numpy.random.randint() 该方法返回[low, high)范围的随机整数。该方法有三个参数low、high、size 三个参数。默认high是None,如果只有low,那范围就是[0,low)。如果有high,范围就是[low,high)numpy.random.randn(d0,d1,…,dn) 该方法返回一个或一组样本,具有正态分布np.random.normal 指定期望和方差的正太分布e = np.random.random(size=2)  # 一维数组,元素两个,[0.0,1.0]的随机数f = np.random.random(size=(2, 3))  # 两行三列数组,[0.0,1.0]的随机数h = np.random.randint(10, size=3)  # [0,10]范围内的一行三列随机整数i = np.random.randint(5, 10, size=(2, 3))  # [5,10]范围内的2行3列随机整数1.3 其他方式数组numpy.zeros 创建指定大小的数组,数组元素以0 来填充numpy.ones 创建指定形状的数组,数组元素以1 来填充numpy.empty 创建一个指定形状(shape)、数据类型(dtype)且未初始化的数组,里面的元素的值是之前内存的值np.linspace 创建一个一维数组,数组是一个等差数列构成的numpy.logspace 创建一个于等比数j = np.zeros((2, 5))k = np.ones((2, 5))l = np.linspace(1, 20, 10)2. 数组属性查看ndarray.ndimdarray.shape 数组的维度和列,对于矩阵,n 行m 列ndarray.size 数组元素的总个数,相当于.shape 中n*m 的值ndarray.dtype ndarray 对象的元素类型ndarray.itemsize ndarray 对象中每个元素的大小,以字节为单位ndarray.flags ndarray 对象的内存信息ndarray.real ndarray 元素的实部ndarray.imag ndarray 元素的虚部ndarray.data 包含实际数组元素的缓冲区,由于一般通过数组的索引获取元素,所以通常不需要使用这个属性。print('ndim:数组的秩(维度)'.center(20, '*'))print('ndim:', i.shape[1])3. 数组索引x = np.arange(1, 13) # 一维数组a = x.reshape(4, 3) # 二维数组print(‘x:’, x)print(‘a:’, a)3.1 一维数组的索引print(x[2:])print(x[3:8])3.2 二维数组的索引print(a[0])  # 第一行print(a[2, 2])  # 第三行第4列print(a[:, 2])print(a[::2, 0])  # 所有奇数行第1列数据print(a[(2, 1), (1, 2)])  # 第3行第2列,第2行第3列   = np.array((a[2,1],a[1,2]))取出来后在重新生成新的数组print(a[-2])  # 获取倒数第二行print(a[::-1])  # 行倒序print(a[::-1, ::-1])  # 行列倒序4. 数组的方法4.1 改变数组维度reshape将一维数组变成二维或者三维ravel将三维数组变成一维数组,flatten将二维数组变成一维数组4.2 数组拼接使用numpy.hstack(a1,a2) 函数将两个数组水平组合numpy.vstack(a1,a2) 函数可以将两个或多个数组垂直组合起来形成一个数组使用numpy.concatenate((a1, a2, …), axis),控制axis参数的值也可以实现hstack和vstack的功能,axis=0等同于vstack、axis=1等同于hstack4.3 数组分隔b = np.split(x, 4)  # 将一个一维数组四等分, 用b[1]的方式获取每个块的数据# print(b[1])c = np.split(a, 2, axis=0)  # 二维数组的垂直分隔,按行分隔成两部分# print(c[0])d = np.split(a, [2], axis=1)  # 二维数组的水平分隔,按列分隔成两部分# print(d[0])4.4 算术运算加减乘除: add(),subtract(),multiply() 和divide()np.sum() 求和np.prod() 所有元素相乘np.mean() 平均值np.std() 标准差np.var() 方差np.median() 中数np.power() 幂运算np.sqrt() 开方np.min() 最小值np.max() 最大值np.argmin() 最小值的下标np.argmax() 最大值的下标np.inf 无穷大np.exp(10) 以e 为底的指数np.log(10) 对数
  • [活动体验] 新教程纠错-快速入门-初学入门-张量,按照教程步骤操作性能远低于numpy,通过求助后规避性能问题。
    1. 下载安装MindSpore 最新版本。2. 根据快速入门-初学入门--张量操作性能低,求助后通过设置device_target="CPU"规避。详情见问题单:https://gitee.com/mindspore/mindspore/issues/I3P1WI3. 个人邮箱 boychenyikun@163.com
  • [技术干货] Python 速度慢,试试这个方法提高 1000 倍
    1、人们一直诟病 Python 程序的速度很慢,它到底有多慢呢?在每次的编程语言速度竞赛中,Python 的名次通常都比较垫底。有人解释这是因为 Python 是一种解释型语言(代码无需编译即可执行),而所有的解释型编程语言执行速度都很慢。然而,我们知道 Java 也是一种解释型语言,它的字节码是由 JVM 解释的。而在这个基准测试速度比较页面上的结果却显示:Java 要比 Python 的速度快得多。下面是一个可以用来演示 Python 速度慢的示例。它使用传统的 for 循环来产生一个数的倒数:import numpy as npnp.random.seed(0)values = np.random.randint(1, 100, size=1000000)def get_reciprocal(values): output = np.empty(len(values)) for i in range(len(values)): output[i] = 1.0/values[i]%timeit get_reciprocal(values)结果显示:每个循环平均耗时3.37秒(标准偏差±582毫秒)(共计运行了7次程序,每次一个循环)计算 1,000,000 个倒数竟然需要 3.37 秒。使用 C 语言执行同样的运算只需要不到一眨眼的工夫:9 毫秒;C# 需要 19 毫秒;Nodejs 需要 26 毫秒;Java 仅仅需要 5 毫秒!而 Python 竟然用了让人怀疑人生的 3.37秒(它到底做了些什么)!(注:在本文的最后,我附上了所有语言的测试代码)。2、Python 速度缓慢的根本原因我们通常把 Python 称为一种动态类型编程语言。而 Python 程序中的一切变量都是以对象的形式存在,换句话说,每次 Python 代码处理数据时,都需要进行对象拆箱操作,以确定对象的具体类型。在 for 循环内部,每次循环都需要拆箱对象,检查类型并计算倒数。那3秒钟的时间都在类型检查中浪费了。C 语言和其他传统的编程语言则不同,它们对数据的访问是直接的。但在 Python 中,大量的 CPU 时间都用在了类型检查上。即使是一个简单的赋值操作也会花费很长的时间。如:a = 1这个简单的赋值操作,它需要如下两个步骤:步骤 1:将 a->PyObject_HEAD->typecode 设置为 Integer 类型.步骤 2. 将值 1 赋值 a (a->val =1).关于 Python 为什么速度慢的更多信息,Jake 写的这篇精彩文章值得一读:Why Python is Slow: Looking Under the Hood那么,有没有一种方法可以绕过类型检查,从而提高 Python 程序的性能呢?3、答案是:使用 NumPy 通用函数与 Python 列表(list)不同,NumPy 数组是围绕 C 数组构建的对象。NumPy 数组访问项不需要任何步骤来检查类型。这给我们找到解决方案指明了方向:使用 NumPy 通用函数(亦即UFunc)。简而言之,UFunc 是一种可以直接对整个数组进行算术运算的方法。下面我们将前面那个慢速的 Python 示例改写为 UFunc 版本,它就像下面这样:import numpy as npnp.random.seed(0)values = np.random.randint(1, 100, size=1000000)%timeit result = 1.0/values改写后的代码不仅提高了速度,而且代码变得更短。猜猜现在这个程序执行要花多少时间?它比我上面提到的最快的语言快了2.7毫秒:每个循环平均耗时2.71毫秒(标准偏差±50.8微秒)(共运行了7次程序,每次循环100个)返回代码,关键是 1.0/values 这一行。这里的 values 不是一个数字,而是一个 NumPy 数组。和除法运算符一样,Numpy 还有许多其他运算符(如下图示)。点击这里可以找到所有 Ufunc 运算(操作)符。4、总结对于那些使用 Python 的人来说,使用 Python 处理数据和数字的可能性很大。这些数据可以存储在 NumPy 或 Pandas DataFrame中,因为DataFrame 是基于 NumPy 实现的。所以 Ufunc 也可以使用。UFunc 使我们能够以超越几个数量级的更快速度在 Python 中执行重复操作。最慢的 Python 甚至可以跑得 C 语言更快。这一点太让人激动了。5、附录— C,C#,Java 和 NodeJS 的测试代码C 语言:#include <stdio.h>#include <stdlib.h>#include <sys/time.h>int main(){ struct timeval stop, start; int length = 1000000; int rand_array[length]; float output_array[length]; for(int i = 0; i<length; i++){ rand_array[i] = rand(); } gettimeofday(&start, NULL); for(int i = 0; i<length; i++){ output_array[i] = 1.0/(rand_array[i]*1.0); } gettimeofday(&stop, NULL); printf("took %lu us\n", (stop.tv_sec - start.tv_sec) * 1000000 + stop.tv_usec - start.tv_usec); printf("done\n"); return 0;}C#(.net 5.0):using System;namespace speed_test{ class Program{ static void Main(string[] args){ int length = 1000000; double[] rand_array =new double[length]; double[] output = new double[length]; var rand = new Random(); for(int i =0; i<length;i++){ rand_array[i] = rand.Next(); //Console.WriteLine(rand_array[i]); } long start = DateTimeOffset.Now.ToUnixTimeMilliseconds(); for(int i =0;i<length;i++){ output[i] = 1.0/rand_array[i]; } long end = DateTimeOffset.Now.ToUnixTimeMilliseconds(); Console.WriteLine(end - start); } }}Java:import java.util.Random;public class speed_test { public static void main(String[] args){ int length = 1000000; long[] rand_array = new long[length]; double[] output = new double[length]; Random rand = new Random (); for(int i =0; i<length; i++){ rand_array[i] = rand.nextLong(); } long start = System.currentTimeMillis(); for(int i = 0;i<length; i++){ output[i] = 1.0/rand_array[i]; } long end = System.currentTimeMillis(); System.out.println(end - start); }}NodeJS:let length = 1000000;let rand_array = [];let output = [];for(var i=0;i<length;i++){ rand_array[i] = Math.floor(Math.random()*10000000);}let start = (new Date()).getMilliseconds();for(var i=0;i<length;i++){ output[i] = 1.0/rand_array[i];}let end = (new Date()).getMilliseconds();console.log(end - start);原文链接:https://python.plainenglish.io/a-solution-to-boost-python-speed-1000x-times-c9e7d5be2f40
  • [技术干货] NumPy 迭代数组-numpy.nditer
    Numpy.nditer是Numpy选代数组的对象,它提供能够灵活的访问一个或者多个数组元素的方式。import numpy as npz=np.arange(4).reshape(2,2)print("原始数组:",z,"\n");print("代选后的:")for x in np.nditer(z): print(x,end=',')输出结果:使用Numpy.nditer实现一个选代过程import numpy as npa=np.arange(16).reshape(4,4)for x in np.nditer(a): print(x,end=',')print('\n')for x in np.nditer(a,order='C'): print(x,end=',')print('\n')for x in np.nditer(a.T,order='C'): print(x,end=',')print('\n')for x in np.nditer(a.T.copy(order='F')): print(x,end=',')print('\n')for x in np.nditer(a.T.copy(order='C')): print(x,end=',')输出结果‘修改数组中元素的值numpy.nditer 对象有另一个可选参数 op_flags。 默认情况下,numpy.nditer 将视待迭代遍历的数组为只读对象(read-only),为了在遍历数组的同时,实现对数组元素值得修改,必须指定 read-write 或者 write-only 的模式。import numpy as npa = np.arange(0, 60, 5)a = a.reshape(3, 4)print('原始数组:')print(a)for x in np.nditer(a, op_flags=['readwrite']): x[...] = 2 * xprint('修改后的数组:')print(a)输出结果
  • [技术干货] python-Numpy统计函数
    Numpy提供各种统计函数,用于数据统计分析,用于从数组中查找最小元素,最大元素,百分位标准差和方差等。1-numpy.amin()numpy.amin()他是查找指定轴上数组元素的最小值的import numpy as np a = np.array([[1,5,8],[15,31,55],[99,89,75]])print("原始数组:") print(a)print("array数组中最小元素:", np.amin(a))print("array数组中最小元素:", np.amin(a,0))print("array数组中最小元素:", np.amin(a,1))输出结果2-numpy.amax()numpy.amax() 他是查找轴数组元素上最大值的import numpy as np a = np.array([[1,5,8],[15,31,55],[99,89,75]])print("原始数组:")print(a)print("array数组中最大元素:", np.amax(a))print("array数组中最大元素:", np.amax(a,0))print("array数组中最大元素:", np.amax(a,1))输出结果:3-numpy-ptp()numpy.ptp()他是计算数组中最大值与最小值的差的 ( 差=最大值-最小值 )import numpy as npa = np.array([[1,5,8],[15,31,55],[99,89,75]])print('我们的数组是:')print(a)print('调用 ptp() 函数:')print(np.ptp(a))print('沿轴 1 调用 ptp() 函数:') print(np.ptp(a, axis=1)) 这里计算的是 8-1,55-15,99-75print('沿轴 0 调用 ptp() 函数:')print(np.ptp(a, axis=0)) 这里计算的是 99-1,89-5,75-8输出结果3-numpy.percentile()numpy.percentile()他是百分位数统计中使用的度量,表示小于这个值的观察值的百分比列如:第 x 个百分位数是这样一个值,它使得至少有 x% 的数据项小于或等于这个值,且至少有 (100-x)% 的数据项大于或等于这个值。import numpy as npa = np.array([[1,5,8],[15,31,55],[99,89,75]])print(np.percentile(a,10,0))输出结果4-numpy.median()numpy.median中值是一组数值中,排在中间位置的值,可以指定轴方向。import numpy as npa = np.array([[3, 7, 5], [8, 4, 3], [2, 4, 9]])print('我们的数组是:')print(a)print("轴0 中值:", np.median(a, 0))输出结果:5-numpy.mean()numpy.mean是计算数组的平均值,可以指定轴方向的import numpy as npa = np.array([[3, 7, 5], [8, 4, 3], [2, 4, 9]])print('我们的数组是:')print(a)print("轴0 平均值:", np.mean(a, 0)) 输出结果5-numpy.average()numpy.average()函数根据在另一个数组中给出的各自的权重计算数组中元素的加权平均值。该函数可以接受一个轴参数。 如果没有指定轴,则数组会被展开。加权平均值即将各数值乘以相应的权数,然后加总求和得到总体值,再除以总的单位数。考虑数组[1,2,3,4]和相应的权重[4,3,2,1],通过将相应元素的乘积相加,并将和除以权重的和,来计算加权平均值。import numpy as npa = np.array([[3, 7, 5], [8, 4, 3], [2, 4, 9]])print('我们的数组是:')print(a)b = np.array([1, 2, 6])print("轴1 加权平均值:", np.average(a, 1, weights = b))输出结果6-numpy.std()和numpy.var()numpy.std() 和numpy.var他俩是计算标准差(std)和方差(var)的import numpy as npprint (np.std([1,2,3]))print (np.var([1,2,3]))输出结果
  • [安装] mindspore跟numpy的版本配套
    在ubuntu 18.04 arm 昇腾310 Python3.7.5环境上安装mindspore,发现它会卸载numpy1.20.2版本,并去安装numpy1.17.5;MindSpore对numpy的版本要求必须是1.17.5吗?何时会支持高版本的numpy
总条数:107 到第
上滑加载中