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)