numpy练习100道题
生活随笔
收集整理的這篇文章主要介紹了
numpy练习100道题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
# -*- coding: utf-8 -*-
"""
Created on Fri Nov 8 10:17:18 2019@author: lenovo
"""import numpy as np
import pandas as pdprint(np.__version__)##打印輸出numpy的版本和配置信息
np.show_config()
Z=np.zeros(10)##創建長度為10的零向量
print(Z)Z=np.zeros((10,10))
print(Z.size * Z.itemsize)##獲取數組所占內存大小
np.info(np.add)##用命令行獲取numpy add函數的文檔說明Z=np.zeros(10)
Z[4]=1
print(Z)##創建一個長度為10的零向量,并把第五個值賦值為1
Z=np.arange(10,50)
print(Z)##獲得一個值域為10到49的向量
Z=np.arange(50)
Z=Z[::-1]
print(Z)##講一個向量進行翻轉
Z=np.arange(9).reshape(3,3)
print(Z)##創建一個3*3的矩陣,值域為0到8
nz=np.nonzero([1,2,0,0,4.0])
print(nz)##找出非零位置的索引
z=np.eye(3)
print(z)##創建一個3*3的單位矩陣
z=np.random.random((3,3,3))
print(z)##創建一個3*3*3的隨機矩陣
z=np.random.random((10,10))
zmax,zmin=z.max(),z.min()
print(z.max,z.min)##創建一個10*10的隨機數組,并找出數組中最大值與最小值
z=np.random.random(30)
mean=z.mean()
print(mean)##創建一個長度為30的隨機數組,并求出平均值
z=np.ones((10,10))
z[1:-1,1:-1]=0
print(z)##創建一個二維數組,邊界值為1,內部值為0
z=np.ones((10,10))
z=np.pad(z,pad_width=1,mode='constant',constant_values=0)
print(z)##用0來填充一個數組的邊界
z=np.diag([1,2,3,4],k=-1)#k=-1保證了偏移量
print(z)##創建一個5*5的矩陣,設置1,2,3,4在其對角線下面一行
z=np.zeros((8,8),dtype=int)
z[1::2,::2]=1
z[::2,1::2]=1
print(z)##創建一個8*8的國際象棋矩陣黑塊為0,白塊為1
print(np.unravel_index(100,(6,7,8)))##形狀為(6,7,8)數組的形狀,第100個元素的索引
z=np.tile(np.array([[1,0],[0,1]]),(4,4))
print(z)##創建一個8*8的棋盤矩陣
z=np.random.random((5,5))
zmax,zmin=z.max(),z.min()
z=(z-zmin)/(zmax-zmin)
print(z)##對5*5的矩陣歸一化
color=np.dtype([("r",np.ubyte,1),("g",np.ubyte,1),("b",np.ubyte,1),("a",np.ubyte,1)])
c=np.array((255,255,255,1),dtype=color)
print(c)##創建一個dtype來表示顏色(RGBA)
z=np.dot(np.zeros((5,3)),np.zeros((3,2)))
print(z)##一個5*3矩陣和一個3*2矩陣相乘
z=np.arange(11)
z[(3<=z)&(z<8)]*=-1
print(z)##給定一個一維數組把它從3到8的元素求相反數
print(sum(range(5),-1))##結果為9
z=np.random.uniform(-10,+10,10)
print(np.copysign(np.ceil(np.abs(z)),z))##從零位開始舍入浮點數組
z1=np.random.randint(0,10,10)
z2=np.random.randint(0,10,10)
print(np.intersect1d(z1,z2))##兩個數組公共的元素
A=np.ones(3)*1
B=np.ones(3)*1
C=np.ones(3)*1
np.add(A,B,out=B)
np.divide(A,2,out=A)
np.negative(A,out=A)
np.multiply(A,B,out=A)##計算((A+B)*(-A/2))##用五種方法提取隨機數組中的整數部分
z=np.random.uniform(0,10,10)
print(z-z%1)
print(np.floor(z))
print(np.cell(z)-1)
print(z.astype(int))
print(np.trunc(z))##創建一個5*5的矩陣且每一行的值范圍為0~4
z=np.zeros((5,5))
z+=np.arange(5)
print(z)##用一個生成10個整數的函數來構建數組
def generate():for x in range(10):yield x
z=np.fromiter(generate(),dtype=flaot,count=-1)
print(z) ##創建一個大小為10的向量,值域為0到1,不包括0和1
z=np.linspace(0,1,12,endpoint=True)[1:-1]
print(z)#創建一個大小為10的隨機向量,并把它排序
z=np.random.random(10)
z.sort()
print(z) ##對一個小數組求和
z=np.arange(10)
np.add.reduce(z)##np.add.reduce 是numpy.add模塊中的一個ufunc(universal function)函數,c語言實現##如何判斷兩隨機數組相等
A=np.random.randint(0,2,5)
B=np.random.randint(0,2,5)
equal=np.allclose(A,B)
print(equal)
equal=np.array_equal(A,B)
print(equal)##把數組變為只讀
z=np.zeros(5)
z.flags.writeable=False
z[0]=1##將一個10*2的笛卡爾坐標矩陣轉換為極坐標
z=np.random.random((10,2))
x,y=z[:,2],z[:,1]
r=np.sqrt(x**2+y**2)
t=np.arctan2(y,x)
print(r)
print(t)##創建一個大小為10的隨機向量并且將該向量中最大的值替換為0
z=np.random.random(10)
z[z.argmax()]=0
print(z)##創建一個結構化數組,其中x和y坐標覆蓋[0,1]*[1,0]區域
z=np.zeros((5,5),[('x',float),('y').float])
z['x'],z['y']=np.meshgrid(np.linspace(0,1,5),np.linspace(0,1,5))
print(z)##給定兩個數組x和y,構造柯西矩陣
x=np.arange(8)
y=x+0.5
c=1.0/np.subtract.outer(x,y)
print(c)
print(np.linalg.det(c))##計算行列式##打印每個numpy類型的最大和最小可表示值
for dtype in [np.int8,np.int32,np.int64]:print(np.iinfo(dtype).min)print(np.iinfo(dtype).max)
for dtype in [np.float32,np.float64]:print(np.finfo(dtype).min)print(np.finfo(dtype).max)print(np.finfo(dtype).eps)##打印數組中的所有的值
np.set_printoptions(threshold=np.nan)
z=np.zeros((16,16))
print(z)##如何在數組中找到與給定標量接近的值
z=np.arange(100)
v=np.random.uniform(0,100)
index=(np.abs(z-v)).argmin()
print(z[index])##創建表示位置(x,y)和顏色(r,g,b,a)的結構化數組
z=np.zeros(10,[('position',[('x',float,1),('y',float,1)]),('color',[('r',float,1),('g',float,1),('b',float,1)])])
print(z)##思考形狀為(100,2)的隨機向量,求出點和點之間的距離
z=np.random.random((100,2))
x,y=np.atleast_2d(z[:0],z[:,1])
d=np.sqrt((x-x.T)**2+(y-y.T)**2)
print(d)##將float(32)轉換成integer(32)位
z=np.arange(10,dtype=np.int32)
z=z.astype(np.float32,copy=False)
print(z)##讀取TXT文件
z=np.genfromtxt("example.txt",delimiter=",")
print(z)##枚舉的等價操作
z=np.arange(9).reshape(3,3)
for index,value in np.ndenumerate(z):print(index,value)
for index in np.ndindex(z.shape):print(index,z[index])
##構造一個二維高斯矩陣
x,y=np.meshgrid(np.linspace(-1,1,10),np.linspace(-1,1,10))
d=sqrt(x**2+y**2)
sigma,mu=1.0,0.0
g=np.exp(-((d-mu)**2/(2.0*sigma**2)))
print(g)##在二位數組的隨機位置放置p個元素
n=10
p=3
z=np.zeros((n,n))
np.put(z,np.random.choice(range(n*n),p,replace=False),1)
print(z)
##減去矩陣每一行的平均值
x=np.random.rand(5,10)
y=x-x.mean(axis=1,keepdims=True)
print(y)##對數組通過第n列進行排序
z=np.random.randint(0,10,(3,3))
print(z)
print(z[z[:,1].argsort()])#判定一個給定的二維數組存在空列
z=np.random.nuiform(0,3,(3,10))
print((~z.any(axis=0)).any())##從數組中找出與給定值最接近的值
Z=np.random.uniform(0,1,10)
z=0.5
m=z.flat[np.abs(Z-z).argmin()]
print(m)##使用迭代器計算(1,3)和(3,1)的和
A=np.arange(3).reshape(3,1)
B=np.arange(3).reshape(1,3)
it=np.nditer([A,B,None])
for x,y,z in it:z[...]=x+y
print(it.operands[2])##創建一個具有name屬性的數組類
class NameArray(np.ndarray):def __new__(cls,array,name="no name"):obj=np.asarray(array).view(cls)obj.name=namereturn objdef __array_finalize__(self,obj):if obj is None:return self.info=getattr(obj,'name',"no name")
z=NamedArray(np.arange(10),"rang_10")
print(z.name)
##給定一個向量,在第二個向量中每個元素加一
z=np.ones(10)
i=np.random.randint(0,len(z),20)
z+=np.bincount(i,minlength=len(z))
print(z)
np.add.at(z,i,1)
print(z)
##根據索引列表I將向量x的元素累加到數組F
x=[1,2,3,4,5,6]
i=[1,3,9,3,4,1]
f=np.bincount(i,x)
print(f)
##思考(dtype=ubyte)的(w,h,3)圖像,計算唯一顏色的值
w,h=16,16
i=np.random.randint(0,2,(h,w,3)).astype(np.ubyte)
f=i[...,0]*256*256+i[...,1]*256+i[...,2]
n=len(np.unique(f))
print(np.unique(i))
##思考如何求一個四維數組最后兩個軸的數據和
a=np.random.randint(0,10,(3,4,3,4))
sum=a.sum(axis=(-2,-1))
print(sum)
sum=a.reshape(a.shape[:-2]+(-1,)).sum(axis=-1)
print(sum)
##一維向量D,使用相同大小的向量S來計算D的子集的均值,描述子集索引
d=np.random.uniform(0,1,100)
s=np.random.randint(0,10,100)
d_sums=np.bincount(s,weights=d)
d_counts=np.bincount(s)
d_means=d_sums/d_counts
print(d_means)
print(pd.Series(d).groupby(s).mean())
##獲得點積的對角線
a=np.random.uniform(0,1,(5,5))
b=np.random.uniform(0,1,(5,5))
np.diag(np.dot(a,b))
np.sum(a*b.T,axis=1)
np.einsum("ij,ji->i",a,b)
##考慮向量[1,2,3,4,5],建立一個新的向量,在每個值之間交錯有3個連續的零
z=np.array([1,2,3,4,5])
nz=3
z0=np.zeros(len(z)+(len(z)-1)*(nz))
z0[::nz+1]=z
print(z0)
##考慮一個維度(5,5,3)的數組,如何將其與一個(5,5)的數組相乘
a=np.ones((5,5,3))
b=2*np.ones((5,5))
print(a*b[:,:,None])
##對一個數組中任意兩行做交換
a=np.arange(25).reshape(5,5)
a[[0,1]]=a[[1,0]]
print(a)
##給定一個二進制的數組c,如何生成一個數組A滿足np.bincount(A)==c
c=np.buncount([1,1,2,3,4,4,6])
a=np.repeat(np.arange(len(c)),c)
print(a)
#通過滑動窗口計算一個數組的平均數
def moving_average(a,n=3):ret=np.cumsum(a,dtype=float)ret[n:]=ret[n:]-ret[:-n]return ret[n-1:]/n
z=np.arange(20)
print(moving_average(z,n=3))
##對布爾值取反,改變浮點數的符號
z=np.random.randint(0,2,100)
np.logical_not(z,out=z)
z=np.random.uniform(-1.0,1.0,100)
np.negative(z,out=z)
##思考兩組點集p0和p1去描述一組線和一個點p,如何計算點p到每一條線i的距離
def distance(p0,p1,p):t=p1-p0l=(t**2).sum(axis=1)u=-((p0[::0]-p[...,0])*t[:,0]+(p0[:,1]-p[...,1])*t[:,1])/lu=u.reshape(len(u),1)d=p0+u*t-preturn np.sqrt((d**2).sum(axis=1))
p0=np.random.uniform(-10,10,(10,2))
p1=np.random.uniform(-10,10,(10,2))
p=np.random.uniform(-10,10,(1,2))
print(distance(p0,p1,p))
##考慮兩組點集p0和p1去描述一組線(二維)和一組點集p,如何計算每一個點j(p[j])到每一條線i的距離
p0=np.random.uniform(-10,10,(10,2))
p1=np.random.uniform(-10,10,(10,2))
p=np.random.uniform(-10,10,(10,2))
print(np.array([distance(p0,p1,p_i) for p_i in p]))
##z=[1,2,3,4,5,6,7,8,9,10,11,12,13,14],如何生成一個數組r=[[1,2,3,4],[2,3,4,5],[3,4,5,6]...[11,12,13,14]]
z=np.arange(1,15,dtype=np.uint32)
r=stride_tricks.as_strided(z,(11,4),(4,4))
print(r)
#計算矩陣的秩
z=np.random.uniform(0,1,(10,10))
u,s,v=np.linalg.svd(z)
rank=np.sum(s>1e-10)
print(rank)
##找出數組中出現頻率最高的值
z=np.random.randint(0,10,50)
print(np.bincount(z).argmax())
##從一個10*10的矩陣中提取一個連續的3*3區塊
z=np.random.randint(0,5,(10,10))
n=3
i=1+(z.shape[0]-3)
j=1+(z.shape[1]-3)
c=stride_tricks.as_strided(z,shape=(i,j,n,n),strides=z.strides+z.strides)
print(c)
##創建一個z[i,j]==z[j,i]的二維數組子類
class Symetric(np.ndarray):def __setitem__(self,index,value):i,j=indexsuper(Symetric,self).__setitem__((i,j),value)super(Symetric,self).__setitem__((j,i),value)def symetric(z):return np.asarray(z+z.T-np.diag(z.diagonal())).view(Symetric)s=symetric(np.random.randint(0,10,(5,5)))s[2,3]=42print(s)
##考慮p個n*n矩陣和一組形狀為(n,1)的向量,計算p個矩陣的乘(n,1)
p,n=10,20
m=np.ones((p,n,n))
v=np.ones((p,n,1))
s=np.tensordot(m,v,axes=[[0,2],[0,1]])
print(s)
##對于一個16*16的數組,如何得到一個4*4區域的和
z=np.ones((16,16))
k=4
s=np.add.reduceat(np.add.reduceat(z,np.arange(0,z.shape[0],k),axis=0),np.arange(0,z.shape[1],k),axis=1)
print(s)
##找到數組的第n大值
z=np.arange(10000)
np.random.shuffle(z)
n=5
print(z[np.argsort(z)[-n:]])##slow
print(z[np.argpartition(-z,n)[:n]])
##給定任意向量,創建笛卡爾積
def cartesian(arrays):arrays=[np.asarray(a) for a in arrays]shape=(len(x) for x in arrays)ix=np.indices(shape,dtype=int)ix=ix.reshape(len(arrays),-1).Tfor n,arr in enumerate(arrays):ix[:,n]=arrays[n][ix[:,n]]return ix
print(cartesian(([1,2,3],[4,5],[6,7])))
##從常規數組中創建記錄數組
z=np.array([("hello",2.5,3),("world",3.6,2)])
r=np.core.records.fromarrays(z.T,names='col1,col2,col3',formats='s8,f8,i8')
print(r)
##思考一個大向量Z,用三種不同的方法計算它的立方
x=np.random.rand(5e7)
%timeit np.power(x,3)
%timeit x*x*x
%timeit np.einsum('i,i,i->i',x,x,x)
##考慮兩個形狀分別為(8,3)和(2,2)的數組A和B,如何在數組A中找到滿足包含B中元素的行
a=np.random.randint(0,5,(8,3))
b=np.random.randint(0,5,(2,2))
c=(a[...,np.newaxis,np.newaxis]==b)
rows=np.where(c.any((3,1)).all(1))[0]
print(rows)
##思考一個10*3的矩陣,如何分解出有不全相同值的行
z=np.random.randint(0,5,(10,3))
print(z)
e=np.all(z[:,1:]==z[:,:-1],axis=1)
u=z[~e]
print(u)
u=z[z.max(axis=1)!=z.min(axis=1),:]
print(u)
##講一個整數向量 轉換成二進制矩陣
i=np.array([0,1,2,3,15,16,32,64,128])
b=((i.reshape(-1,1)&(2**np.arange(8)))!=0).astype(int)
print(b[:,::-1])
i=np.array([0,1,2,3,15,16,32,64,128],dtype=np.uint8)
print(np.unpackbits(i[:,np.newaxis],axis=1))
##給定一個二維數組,如何提出唯一的行
z=np.random.randint(0,2,(6,3))
t=np.ascontiguousarray(z).view(np.dtype((np.void,z.dtype.itemsize*z.shape[1])))
_,idx=np.unique(t,return_index=True)
uz=z[idx]
print(uz)
##考慮兩個向量A和B,寫出用einsum等式對應的inner,outer,sum,mul
a=np.random.uniform(0,1,10)
b=np.random.uniform(0,1,10)
np.einsum('i->',a)
np.einsum('i,i->i',a,b)
np.einsum('i,i',a,b)
np.einsum('i,j->ij',a,b)
##給定一個整數n和一個二維數組x,從x中選擇可以被解釋為從多n度的多項式分布式的行
x=np.asarray([[1.0,0.0,3.0,8.0],[2.0,0.0,1.0,1.0],[1.5,2.5,1.0.0.0]])
n=4
m=np.logical_and.reduce(np.mod(x,1)==0,axis=-1)
m &= (x.sum(axis=-1)==n)
print(x[m])
##對于一個一維數組x,計算它boostrapped之后95%置信區間的平均值
x=np.random.randn(100)
n=1000
idx=np.random.randint(0,x.size,(n,x.size))
means=x[idx].mean(axis=1)
confint=np.percentile(means,[2.5,97.5])
print(confint)
努力加油a啊,(o)/~
總結
以上是生活随笔為你收集整理的numpy练习100道题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python实现八皇后问题所有实现方式
- 下一篇: 402. 移掉K位数字(单调栈)