Numpy基础知识1

Numpy

一、数组求和小例题(溢出问题)

#用 numpy创建0~n的平方的数组
import numpyyiyisa=numpy.arange(5)**2
print(a) #一维数组类型
print(type(a))
print(a**2)
b=numpy.arange(5)**3
result=a+b
print(result)

# c=numpy.arange(5)
# d=numpy.arange(5)
def numpysum(n):
    c = numpy.arange(n)**2
    print(c)
    d = numpy.arange(n)**3
    print(d)
    e=c+d
    return e
result=numpysum(9)
print(result)
#当n>=1292时候,数据有复数,因为int默认是32位整型的取值最大是(2**32)-1,
#[          0           2          
#12 ...  2143362090 -2146614196-2141615444]

#所求出的值溢出,只要扩大数据整型便可,方法如下:
def numpysum(n):
    '''
    numpy.arange(start,end,step,type)
    start:开始位置
    end:结束位置
    step:步距
    type:类型
    '''
    x= numpy.arange(0,n,1,numpy.int64) ** 2
    print(x)
    y= numpy.arange(0,n,1,numpy.int64) ** 3
    print(y)
    f = x + y
    return f
result = numpysum(1293)
print(result)
#结果如下
[      0       1       4 ... 1664100 1666681 1669264]
[         0          1          8 ... 2146689000 
2151685171 2156689088]
[         0          2         12 ... 2148353100 
2153351852 2158358352]

二、运行大量数据的常规python和numpy 的比较

from datetime import datetime
import numpy
def create(n,num):
    a=[]
    for i in range(n):
        a.append(i**num)
    return a

#创建0~n的平方列表
# a=create(3,2)
# print(a)
# b=create(3,3)
# print(b)
#用常规的ptyhon求和
def pythonsum(n):
    a=create(n,2)
    b=create(n,3)
    c=[]
    for i in range(len(a)):
        c.append(a[i]+b[i])
    return c
start=datetime.now()      #开始运行的时间
pythonresult=pythonsum(1000000)
deltatime=datetime.now()-start
# print(pythonresult)
print("常规程序运行的时间:{}".format(deltatime.microseconds))#微秒10**6

def numpysum():
    a=numpy.arange(0,n,1,numpy.int64)**2
    b=numpy.arange(0,n,1,numpy.int64)**3
    c=a+b
    return c
start1=datetime.now()      #开始运行的时间
numpyresult=pythonsum(1000000)
deltatime1=datetime.now()-start1
# print(numpyresult)
print("numpy程序运行的时间:{}".format(deltatime1.microseconds))
#运行结果如下:
常规程序运行的时间:476085
numpy程序运行的时间:401080
#不同电脑的配置和运行速度不一样

三、利用numpy实现两个向量相乘的结果

#方法1
import numpy
def create(n,num):       #定义一个numpy函数
    a=[]
    for i in range(n):
        a.append(i**num)
    return a
def numpycheng(n):
    a=create(n,2)
    b=create(n,3)
    for i in range(n):   #遍历所有的元素
        c=a[i]*b[i]
    return c
numpychengresult=numpycheng(4)
print(numpychengresult)

#方法2
a=numpy.arange(4)**2
print(a)
b=numpy.arange(4)**3
print(b)
c=[]
for i in range(4):
    c.append(a[i]*b[i])
    d=a[i]*b[i]
print(c)
print(d)

numpy.ndarray

一、创建numpy数组的集中方法

方法1 常规
 a=np.arange(start,end,step,type)
    # start:开始位置
    # end:结束位置
    # step:步距
    # type:类型
a=np.arange(10)
b=np.arange(0,10,1,np.int64)
print(b.dtype)
#查看numpy数组类型
# 结果int64

方法2 利用列表创建numpy数组

#np.array(list)
#list:python中的列表
price=[12,456,23,5,763,3]
price_2=np.array(price)
print(price_2)
print(price_2.dtype)
# 不指定默认int32
方法3:创建yield从a到b范围内取n个点 的等间距分布的数据
a=0
b=10
n=4
c=np.linspace(0,10,4,endpoint=True) 
[0      3.333333     6.666667     10]
c=np.linspace(0,10,4,endpoint=False)
[0      2.5      5      7.5]
np.linspace(start,end,points,endpoint=)
            #开始,结束,
            #points:在开始和结束之间取点的个数
            #endpoint=:创建的数组是否包含end结束位置
c=np.linspace(0,10,4,endpoint=True)  #默认
d=np.linspace(0,10,4,endpoint=False)
print(c)
print(d)
print(c.dtype)
print(d.dtype)
#默认是int64

#查看数组的形状shape
print(c.shape)  #一维数组
d2=np.array([[1,2,3,4],
             [5,6,7,8]])
print(d2.shape)   #2行4列
拓展比较
#运行大量数据的常规python和numpy 的速度比较
from datetime import datetime
import numpy
# def create(n,num):
#     a=[]
#     for i in range(n):
#         a.append(i**num)
#     return a
# #创建0~n的平方列表
# # a=create(3,2)
# # print(a)
# # b=create(3,3)
# # print(b)
# #用常规的ptyhon求和
def pythonsum(n):
    a=create(n,2)
    b=create(n,3)
    c=[]
    for i in range(len(a)):
        c.append(a[i]+b[i])
    return c
start=datetime.now()      #开始运行的时间
pythonresult=pythonsum(100000)
deltatime=datetime.now()-start
# print(pythonresult)
print("常规程序运行的时间:{}".format(deltatime.microseconds))#微秒10**6

import numpy
def numpysum():
    a=numpy.arange(0,n,1,numpy.int64)**2
    b=numpy.arange(0,n,1,numpy.int64)**3
    c=a+b
    return c
start1=datetime.now()      #开始运行的时间
numpyresult=pythonsum(100000)
deltatime1=datetime.now()-start1
# print(numpyresult)
print("程序运行的时间:{}".format(deltatime1.microseconds))

二利用numpy实现两个向量相成的结果

#方法1
import numpy
def create(n,num):   #定义一个numpy函数
    a=[]
    for i in range(n):
        a.append(i**num)
    return a
def numpycheng(n):
    a=create(n,2)
    b=create(n,3)
    for i in range(n):  #遍历所有的元素
        c=a[i]*b[i]
    return c
numpychengresult=numpycheng(4)
print(numpychengresult)

#方法2
a=numpy.arange(4)**2
print(a)
b=numpy.arange(4)**3
print(b)
c=[]
for i in range(4):
    c.append(a[i]*b[i])
    d=a[i]*b[i]
print(c)
print(d)

三、创建多维数组

import numpy as np
#创建2维数组
d2=np.array([[1,2,3,5,6],
             [7,8,5,4,2]])
a=np.arange(5)
b=np.arange(6,11,1)
d2_1=np.array([a,b])
print(d2_1)

创建特殊的数组

1创建值全部是0 的数组

import numpy as np
zeros=np.zeros([2,2])
print(zeros)

2创建值全部是1 的数组

ones=np.ones((3,4))
print(ones)

3创建一个多维的值全部是指定的值的数组

full=np.full((2,2),10)
print(full)

4 创建对角矩阵,必须是方正

#即行数等于列数
eye=np.eye(2)
print(eye)  #对角线是1
#将方阵对象线移动
eye2=np.eye(3,k=1)    #k为正,往右上角移动,为负,往左下方移动
print(eye2)

5创建一个由0-1之间的随机数组成的数数组


random=np.random.random((2,3))
print(random)

例题

输出如下数组
[[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[1. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]

d5=np.ones((10,10))
d5[1:9,1:9]=0
print(d5)

猜你喜欢

转载自blog.csdn.net/sakura55/article/details/80452311