Numpy经典题目简答

本篇分享一些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]])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值