本篇分享一些numpy经典题目的
解答前,先导入库
import numpy as np
import time
正文
1、创建一个长度为10的一维全为0的ndarray对象,然后让第5个元素等于1
a = np.zeros(shape=10)
a[4]=1
结果:array([0., 0., 0., 0., 1., 0., 0., 0., 0., 0.])
2、创建一个元素为从10到49的ndarray对象
b=np.arange(10,50)
结果:array([10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,44, 45, 46, 47, 48, 49])
3、将第2题的所有元素位置反转
c=b[::-1]
结果:array([49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10])
4、使用np.random.random创建一个10*10的ndarray对象,并打印出最大最小元素
d=np.random.random(size=(10,10))
结果:(array([[0.93649387, 0.30999789, 0.98577509, 0.42241406, 0.24471462,
0.4904709 , 0.54432905, 0.32367126, 0.04879351, 0.05295252],
[0.49139417, 0.71144165, 0.25611329, 0.64867629, 0.53691001,
0.23177671, 0.09596514, 0.80587164, 0.45410025, 0.73454106],
[0.50394302, 0.66126125, 0.69198233, 0.95795338, 0.20047453,
0.84076243, 0.98440068, 0.26698879, 0.96469033, 0.63623976],
[0.80248443, 0.06709657, 0.90969006, 0.40489047, 0.37975386,
0.6665804 , 0.77101668, 0.40853097, 0.17108281, 0.60461711],
[0.78875481, 0.09903456, 0.7780262 , 0.93435336, 0.55201073,
0.70741548, 0.18763703, 0.18470216, 0.96104587, 0.04448181],
[0.34754996, 0.35207708, 0.89600742, 0.07691496, 0.41289203,
0.32549834, 0.71619411, 0.7567718 , 0.17677421, 0.55821166],
[0.21850908, 0.87410352, 0.06807469, 0.07177748, 0.20116557,
0.74226893, 0.28254873, 0.99370357, 0.18926678, 0.24972957],
[0.1426231 , 0.93833109, 0.22166546, 0.49828409, 0.56788433,
0.42925627, 0.85729727, 0.96180534, 0.05816407, 0.02638812],
[0.75423393, 0.1999203 , 0.93530994, 0.80576906, 0.43625162,
0.24832013, 0.63368334, 0.68101956, 0.21925003, 0.70508846],
[0.00299288, 0.76582596, 0.31819782, 0.53391227, 0.15209261,
0.60953274, 0.96357515, 0.93257065, 0.49117228, 0.27256025]]),
dmax=d.max()
结果: 0.9937035722322233,
dmin=d.min()
结果: 0.0029928798671922108)
5、创建一个10*10的ndarray对象,且矩阵边界全为1,里面全为0
e=np.zeros(shape=(10,10),dtype='int8')
e[[0,9]]=1
e[:,[0,9]]=1
结果:array([[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]], dtype=int8)
6、创建一个每一行都是从0到4的5*5矩阵
f=np.array([[0,1,2,3,4]]*5)
结果:array([[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]])
7、创建一个范围在(0,1)之间的长度为12的等差数列
g=np.linspace(0,1,num=12)
结果:array([0., 0.09090909, 0.18181818, 0.27272727, 0.36363636, 0.45454545, 0.54545455, 0.63636364, 0.72727273, 0.81818182,
0.90909091, 1. ])
8、创建一个长度为10的随机数组并排序
h=np.sort(np.random.rand(10))
结果:array([0.00228516, 0.04998786, 0.06645369, 0.21982165, 0.34868125,
0.73370004, 0.83468175, 0.84445458, 0.86973562, 0.97642294])
9、创建一个长度为10的随机数组并将最大值替换为0
i=np.random.rand(10)
imax=np.max(i)
imax_all=np.where(i==imax)
i[imax_all]=0
结果:array([0.42898457, 0.28104434, 0.68059436, 0.18696298, 0.15014232, 0.32064039, 0. , 0.05030275, 0.48638929, 0.93154912])
10、如何根据第3列来对一个5*5矩阵排序?
j=np.random.randint(0,5,size=(5,5))
j[j[:,2].argsort()]
结果:array([[0, 2, 0, 0, 4],
[2, 1, 1, 3, 0],
[1, 2, 2, 1, 4],
[2, 0, 2, 3, 2],
[0, 0, 4, 0, 3]])
11、给定一个4维矩阵,如何得到最后两维的和?
k=np.random.randint(0,5,size=(2,3,4,5))
k.sum(axis=(-1,-2))
结果:array([[44, 46, 33], [49, 42, 35]])
12、给定数组[1, 2, 3, 4, 5],如何得到在这个数组的每个元素之间插入3个0后的新数组?
lo=np.array([1, 2, 3, 4, 5])
l=np.zeros(17)
l[::4]=lo
结果:array([1., 0., 0., 0., 2., 0., 0., 0., 3., 0., 0., 0., 4., 0., 0., 0., 5.])
13、给定一个二维矩阵,如何交换其中两行的元素?
m=np.random.randint(0,5,size=(5,5))
m[[0,3,2,1,4]]
结果:array([[4, 2, 4, 3, 2],
[3, 2, 0, 4, 4],
[2, 0, 2, 4, 0],
[2, 4, 0, 0, 4],
[1, 0, 2, 4, 4]])
14、创建一个100000长度的随机数组,使用两种方法对其求三次方,并比较所用时间
n=np.random.rand(100000)
结果:array([0.33710321, 0.16930607, 0.58080103, …, 0.21329483, 0.5413961 , 0.52534307])
%time n**3
结果:Wall time: 4.98 ms
array([0.03830793, 0.00485308, 0.19592151, …, 0.00970378, 0.15868847,
0.14498699])
%time np.dot(np.dot(n,n),n)
结果:Wall time: 1.22 ms
array([11272.35766196, 5661.40730085, 19421.34262843, …,
7132.3426732 , 18103.68545963, 17566.88997905])
15、创建一个53随机矩阵和一个32随机矩阵,求矩阵积
o53=np.random.rand(5,3)
o32=np.random.rand(3,2)
o=np.dot(o53,o32)
结果:array([[1.1082259 , 0.70716147],
[1.42280612, 1.16786743],
[1.79319055, 1.40149208],
[0.97467816, 1.05721834],
[1.15815201, 1.48080649]])
16、矩阵的每一行的元素都减去该行的平均值
p=np.random.randint(0,5,size=(5,4))
p-p.mean(axis=1).reshape(5,1)
结果:array([[-0.5 , -1.5 , 1.5 , 0.5 ],
[ 0.5 , 1.5 , -0.5 , -1.5 ],
[-0.5 , 1.5 , -2.5 , 1.5 ],
[-0.75, 1.25, -1.75, 1.25],
[ 1.75, -0.25, -2.25, 0.75]])
17、打印出以下函数(要求使用np.zeros创建8*8的矩阵):
[[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]
[0 1 0 1 0 1 0 1]
[1 0 1 0 1 0 1 0]]
q=np.zeros(shape=(8,8),dtype='uint8')
q[1::2,::2]=1
q[::2,1::2]=1
结果:array([[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 0, 1, 0, 1],
[1, 0, 1, 0, 1, 0, 1, 0]], dtype=uint8)
18、正则化一个5*5随机矩阵
正则的概念:假设a是矩阵中的一个元素,max/min分别是矩阵元素的最大最小值,则正则化后a = (a - min)/(max - min)
r=np.random.randint(0,5,(5,5))
rmin=r.min()
rdown=r.max()-rmin
(r-rmin)/rdown
结果:array([[4, 4, 0, 3, 3],
[0, 0, 2, 1, 3],
[2, 3, 3, 0, 3],
[0, 1, 1, 0, 3],
[3, 0, 4, 1, 4]])