0
点赞
收藏
分享

微信扫一扫

【numpy】20道numpy题目

1、创建一个长度为10的一维全为0的ndarray对象,然后让第5个元素等于1

import numpy as np

ndarry =np.zeros(10)
ndarry
array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
ndarry[4]=1
ndarry
array([0., 0., 0., 0., 1., 0., 0., 0., 0., 0.])

2、创建一个元素为从10到49的ndarray对象

ndarray = np.arange(10,50)
ndarray
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题的所有元素位置反转

ndarray[::-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])

使用np.random.random创建一个10*10的ndarray对象,并打印出最大最小元素

ndarray = np.random.random((10,10))
ndarray
ndarray.min()
0.009073749212965887

5、创建一个10*10的ndarray对象,且矩阵边界全为1,里面全为0

a=np.zeros((10,10),dtype=np.int8)
a[[0,-1]]=1
a[:,[0,-1]]=1
a
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矩阵

a=np.array([0,1,2,3,4]*5).reshape(5,5)
a
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的等差数列

a=np.linspace(0,1,12)
a
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的随机数组并排序

a = np.random.randint(1,10,size=10)
a.sort()
a
array([1, 2, 2, 3, 4, 4, 6, 7, 8, 9])

9、创建一个长度为10的随机数组并将最大值替换为0

a = np.random.randint(1,10,10)

b=a.max()
c=a==b
a[c]=0
a,b,c
(array([3, 5, 0, 7, 1, 2, 7, 0, 5, 7]),9,
array([False, False, True, False, False, False, False, True, False,
False]))

10、如何根据第3列来对一个5*5矩阵排序????

a=np.random.randint(0,25,size=25).reshape(5,5)
a
array([[ 4, 20, 17,  6,  5],
[ 8, 14, 14, 10, 3],
[ 7, 5, 12, 7, 4],
[15, 1, 7, 5, 24],
[12, 14, 16, 12, 2]])
b=np.argsort(a[:,2])
a[b]
array([[15,  1,  7,  5, 24],
[ 7, 5, 12, 7, 4],
[ 8, 14, 14, 10, 3],
[12, 14, 16, 12, 2],
[ 4, 20, 17, 6, 5]])

11、给定一个4维矩阵,如何得到最后两维的和?

a=np.random.randint(0,10,size=(3,4,5,6))
a.sum(axis=-1).sum(axis=-1)
a
array([[[[4, 0, 0, 8, 6, 9],
[4, 0, 8, 4, 4, 5],
[3, 7, 2, 4, 2, 7],
[9, 8, 9, 2, 3, 1],
[8, 1, 4, 2, 5, 9]],

[[7, 5, 5, 7, 6, 2],
[3, 5, 3, 4, 7, 1],
[0, 5, 7, 7, 6, 7],
[5, 8, 7, 9, 8, 3],
[6, 9, 2, 6, 0, 5]],

[[9, 2, 7, 9, 0, 7],
[1, 4, 7, 5, 4, 3],
[6, 8, 0, 2, 8, 4],
[8, 4, 8, 7, 4, 3],
[0, 9, 2, 2, 6, 7]],

[[3, 0, 0, 9, 5, 3],
[7, 4, 9, 4, 9, 8],
[7, 1, 3, 3, 4, 5],
[1, 0, 7, 3, 8, 3],
[7, 1, 6, 3, 9, 4]]],

[[[0, 4, 8, 9, 7, 6],
[0, 0, 7, 0, 8, 3],
[3, 7, 7, 4, 7, 8],
[5, 1, 7, 5, 3, 7],
[8, 9, 0, 4, 2, 6]],

[[1, 9, 1, 2, 7, 6],
[6, 4, 4, 3, 9, 5],
[4, 1, 5, 8, 9, 5],
[0, 0, 2, 8, 9, 5],
[6, 3, 0, 8, 0, 9]],

[[5, 4, 9, 2, 9, 8],
[2, 7, 4, 3, 5, 8],
[8, 8, 0, 4, 4, 8],
[7, 5, 1, 6, 1, 1],
[1, 8, 1, 0, 4, 4]],

[[7, 6, 6, 4, 8, 2],
[2, 1, 1, 1, 0, 7],
[5, 1, 6, 2, 3, 5],
[2, 4, 6, 0, 8, 9],
[3, 6, 5, 3, 1, 6]]],


[[[1, 8, 1, 7, 2, 5],
[3, 0, 9, 3, 8, 0],
[5, 2, 1, 0, 8, 4],
[4, 1, 3, 8, 4, 3],
[4, 8, 8, 2, 6, 2]],

[[7, 6, 2, 5, 9, 7],
[2, 9, 1, 2, 5, 9],
[3, 0, 2, 5, 5, 0],
[6, 0, 1, 8, 4, 3],
[5, 4, 5, 6, 2, 1]],

[[9, 5, 0, 5, 0, 7],
[0, 4, 8, 4, 4, 8],
[6, 2, 3, 9, 3, 7],
[7, 7, 1, 8, 3, 5],
[0, 4, 7, 6, 9, 7]],

[[2, 1, 4, 6, 7, 8],
[8, 6, 0, 5, 8, 1],
[9, 4, 8, 2, 8, 5],
[0, 6, 2, 3, 9, 6],
[8, 7, 4, 2, 7, 6]]]])

12、给定数组[1, 2, 3, 4, 5],如何得到在这个数组的每个元素之间插入3个0后的新数组?

a=np.arange(1,6)
b=np.zeros(17,dtype=np.int8)
b[::4]=a
b
array([1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5], dtype=int8)

13、给定一个二维矩阵,如何交换其中两行的元素?

a=np.arange(0,20).reshape(4,5)
a
a[[1,0,2,3]]
a
array([[ 0,  1,  2,  3,  4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19]])

14、创建一个100000长度的随机数组,使用两种方法对其求三次方,并比较所用时间

import time
a=np.random.randn(1000000)
a

t1 = time.time()
np.power(a,3)

time= time.time()-t1
time
0.0468747615814209

15、创建一个53随机矩阵和一个32随机矩阵,求矩阵积

a=np.random.randint(0,10,(5,3))

b=np.random.randint(0,10,(3,2))
a,b
np.matmul(a,b)
array([[ 48,  50],
[171, 101],
[124, 62],
[105, 63],
[ 75, 67]])

16、矩阵的每一行的元素都减去该行的平均值

a=np.random.randint(0,10,(3,3))
a
b=a.mean(axis=1).reshape(3,1)
a-b
array([[ 2.66666667, -1.33333333, -1.33333333],
[-3. , 3. , 0. ],
[-1.33333333, 0.66666667, 0.66666667]])

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]]

a=np.zeros((8,8),dtype='int')
a[::2,1::2]=1
a[1::2,::2]=1
a
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]])

18、正则化一个5*5随机矩阵
正则的概念:假设a是矩阵中的一个元素,max/min分别是矩阵元素的最大最小值,则正则化后a = (a - min)/(max - min)

a=np.random.randint(0,10,size=(5,5))
amin=a.min()
amax=a.max()
(a-amin)/(amax-amin)
array([[0.44444444, 0.11111111, 0.11111111, 0.33333333, 0.88888889],
[0. , 0.88888889, 0.77777778, 1. , 0.11111111],
[0.33333333, 0.55555556, 0.66666667, 0.33333333, 0.11111111],
[0.55555556, 0.33333333, 1. , 0.77777778, 0.33333333],
[0.11111111, 0.33333333, 0.11111111, 0.88888889, 0.77777778]])

19、将一个一维数组转化为二进制表示矩阵。例如
[1,2,3]
转化为
[[0,0,1],
[0,1,0],
[0,1,1]]

num = 4
n1 = np.arange(num)
n1
n2 = np.zeros(shape=(num,num),dtype='int')
n2
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]])
for i in range(num):
n = n1[i]
for j in range(num-1,-1,-1):
n2[i][j] = n%2
n = n//2
n2[1::]
array([[0, 0, 0, 1],
[0, 0, 1, 0],
[0, 0, 1, 1]])

20、实现冒泡排序法

arr = np.random.randint(1,10,size=10)
for i in range(1, len(arr)):
for j in range(0, len(arr)-i):
if arr[j] > arr[j+1]:
arr[j], arr[j + 1] = arr[j + 1], arr[j]
arr
array([2, 2, 3, 5, 5, 6, 7, 8, 9, 9])


举报

相关推荐

0 条评论