玩转 Numpy 的精选习题

2023-11-12

玩转 Numpy 的精选习题 (一)

1,打印 numpy 版本

import numpy as np
print(np.__version__)

>1.16.5

2、创建 10 个元素空向量

Z = np.zeros(10)
print(Z)

>[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

3, 返回数组的元素的内存大小

Z = np.zeros((10,10))
print(Z.itemsize)
print("%d bytes"%(Z.size*Z.itemsize))

> 8
> 800 bytes

4,查看 numpy.add 的用法

np.info(np.add)

>add(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj])

Add arguments element-wise.

5,创建一个大小为10的空向量,其中第五个元素赋值为1

Z = np.zeros(10)
Z[4] = 1
print(Z)

>[0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]

6, 创建向量,元素为10-49

Z = np.arange(10,50)
print(Z)

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

7,逆置向量

Z = np.arange(50)
print(Z)
Z = Z[::-1]
print(Z)

>[ 0  1  2  3  4  5  6  7  8  9 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]

>[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  9  8  7  6  5  4  3  2
  1  0]

8,创建3*3矩阵,值分别为 0-8

Z = np.arange(9).reshape(3,3)
print(Z)

>[[0 1 2]
 [3 4 5]
 [6 7 8]]

9,找到非 0 元素索引

nz = np.nonzero([1,2,0,0,4,0])
print(nz)

> (array([0, 1, 4], dtype=int64),)

10,创建 3*3 的向量矩阵;

Z = np.eye(3)
print(Z)

> [[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

11,创建 333 数组,元素值随机;

Z = np.random.random((3,3,3))
print(Z)

>[[[0.33020335 0.85888276 0.72230212]
  [0.01956836 0.53253257 0.73982722]
  [0.03397414 0.44528818 0.42641914]]

 [[0.19122995 0.56924379 0.84207502]
  [0.76823495 0.5557601  0.60467123]
  [0.33447872 0.70850795 0.35257091]]

 [[0.84615772 0.93949644 0.20724402]
  [0.9927998  0.88442679 0.39655603]
  [0.88817575 0.34702258 0.22757922]]] 

12,创建一个10*10数组,找最大值,最小值,平均值

Z = np.random.random((10,10))
print(Z)
Zmin,Zmax,Zmean = Z.min(),Z.max(),Z.mean()
print(Zmin,Zmax,Zmean)


> [[0.12973065 0.31677156 0.54994539 0.91349228 0.36075614 0.08692027
  0.45248993 0.26464321 0.30248679 0.26602034]
 [0.02364034 0.53374142 0.30359262 0.62535471 0.73467954 0.9846915
  0.74688887 0.48055324 0.38289746 0.24502886]
 [0.5322309  0.38022224 0.24114753 0.50580718 0.45854571 0.55290577
  0.74052612 0.09313212 0.93412896 0.49288767]
 [0.93782643 0.76282996 0.7010213  0.28775456 0.78197272 0.70660015
  0.84372202 0.78868034 0.78336608 0.51177132]
 [0.77439896 0.07053705 0.69320814 0.52254626 0.7504721  0.74303412
  0.91345364 0.02576358 0.60881113 0.59070141]
 [0.66012363 0.6985128  0.66980978 0.56780945 0.12893516 0.82853888
  0.71200874 0.25859772 0.17366786 0.54844797]
 [0.0383674  0.63298341 0.55101785 0.90127532 0.72015945 0.45123806
  0.32016112 0.47413686 0.26122929 0.83610203]
 [0.95844267 0.70325507 0.41800104 0.33859346 0.01799442 0.25119684
  0.02960764 0.95912232 0.34042016 0.58667242]
 [0.57093639 0.22364083 0.04937112 0.22619717 0.19154811 0.86348401
  0.45599839 0.31423009 0.54150058 0.12802574]
 [0.06339162 0.60665877 0.72231736 0.52420897 0.49326727 0.37083385
  0.53290497 0.37937229 0.23433393 0.60931142]]
0.01799442455882616 0.9846915015819662 0.4957229230688264

13,创建一个2d数组,1在外面,0在里面

Z = np.ones((10,10))
Z[1:-1,1:-1] = 0
print(Z)

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

14,在现有的数组周围填补 0 padding

Z = np.ones((5,5))
Z = np.pad(Z,pad_width = 1,mode = "constant",constant_values = 0)
print(Z)

# 内置补一圈0
Z = np.ones((5,5))
Z[:,[0,-1]] = 0
Z[[0,-1],:]  = 0
print(Z)

> [[0. 0. 0. 0. 0. 0. 0.]
 [0. 1. 1. 1. 1. 1. 0.]
 [0. 1. 1. 1. 1. 1. 0.]
 [0. 1. 1. 1. 1. 1. 0.]
 [0. 1. 1. 1. 1. 1. 0.]
 [0. 1. 1. 1. 1. 1. 0.]
 [0. 0. 0. 0. 0. 0. 0.]]

> [[0. 0. 0. 0. 0.]
 [0. 1. 1. 1. 0.]
 [0. 1. 1. 1. 0.]
 [0. 1. 1. 1. 0.]
 [0. 0. 0. 0. 0.]]

15,np的一些特殊表达式用法

print(0*np.nan) #nan
print(np.nan == np.nan)# False
print(np.inf > np.nan) # False
print(np.nan - np.nan) #nan
print(np.nan in set([np.nan])) # True
print(0.3==3*0.1) # False

16,创建一个 5*5 矩阵值为1,2,3,4在对角线的下方

Z = np.diag(1+np.arange(4),k = -1)
print(Z)

> [[0 0 0 0 0]
 [1 0 0 0 0]
 [0 2 0 0 0]
 [0 0 3 0 0]
 [0 0 0 4 0]]

17,创建一个 8*8 矩阵,并用棋盘模式填充

Z = np.zeros((8,8),dtype =int)
Z[1::2,::2] = 1 # 从第一行每次增加2行;
Z[::2,1::2] = 1 # 从第一列,每次增加两列;
print(Z)

> [[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,返回 (6,7,8)数组 第100元素的索引:

print(np.unravel_index(99,(6,7,8)))

> (1, 5, 3)

19, 利用 tile 功能创建 8*8 矩阵;

Z = np.tile(np.array([[0,1],[1,0]]),(4,4))
print(Z)

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

20,对5*5 随机元素矩阵

Z = np.random.random((5,5))
Z = (Z-np.mean(Z))/(np.std(Z))
print(np.std(Z))
print(Z)

> 0.9999999999999999
[[ 1.59898483  0.0897438  -1.04817826 -0.15821328  0.84998669]
 [-0.1827481  -0.30145101  1.24307433  0.57339069 -0.40676173]
 [-1.03534466 -0.02810903  2.15479285  0.48527072  0.42268743]
 [-0.34578218  1.62264222 -1.21917396 -0.01898178 -1.27560744]
 [-1.23050258 -1.08268862  1.1647007  -1.49899855 -0.37273306]]

玩转 Numpy 的精选习题 (二)

以下部分是 21- 40题,对于陌生的用法大家记得跟着敲一下,加深以下理解!

21,创建一个自定以类型来表述一个 RGBA 颜色代码(unsigned)

color = np.dtype([('r',np.ubyte,1),
                 ("g",np.ubyte,1),
                 ('b',np.ubyte,1),
                  ('a',np.ubyte,1)])
print(color)

> [('r', 'u1'), ('g', 'u1'), ('b', 'u1'), ('a', 'u1')]

22,53 矩阵乘以 32 矩阵;

Z = np.dot(np.ones((5,3)),np.ones((3,2)))
print(Z)

> [[3. 3.]
 [3. 3.]
 [3. 3.]
 [3. 3.]
 [3. 3.]]

23, 给定一维数组,在3-8元素全部取反

Z = np.arange(11)
Z[(3<Z)&(Z<8)] *=-1
print(Z)

> [ 0  1  2  3 -4 -5 -6 -7  8  9 10]

24 ,下面脚本输出结果为?

print(sum(range(5),-1)) # 9
from numpy import * 
print(sum(range(5),-1)) # 10

25 ,下面表达式结果为:

print(np.array(0)/np.array(0))
print(np.array(0)//np.array(0))
print(np.array([np.nan]).astype(int).astype(float))

>nan
0
[-2.14748365e+09]

16,创建一个 5*5 矩阵值为1,2,3,4在对角线的下方

Z = np.diag(1+np.arange(4),k = -1)
print(Z)

> [[0 0 0 0 0]
 [1 0 0 0 0]
 [0 2 0 0 0]
 [0 0 3 0 0]
 [0 0 0 4 0]]

26, 将一个 浮点数组从0舍入

Z = np.random.uniform(-10,+10,10)
print(Z)
print(np.copysign(np.ceil(np.abs(Z)),Z))

> [-8.9433086  -1.94558017  5.09831429  0.75843992 -2.57004218 -3.68920573
 -2.23238395 -6.75331705  3.62935401 -2.37852371]
[-9. -2.  6.  1. -3. -4. -3. -7.  4. -3.]

27,找到两个数组的共有元素;

Z1 = np.random.randint(0,10,10)
Z2 = np.random.randint(0,10,10)
print(np.intersect1d(Z1,Z2))

> [0 1 4 6 7 8]

28,怎样返回昨天、今天、明天;

yes = np.datetime64("today") - np.timedelta64(1)
tod = np.datetime64("today")
tom = np.datetime64("today") + np.timedelta64(1)

print(yes)
print(tod)
print(tom)

> 2020-06-30
2020-07-01
2020-07-02

29,返回,19年2月份的所有日期

Z = np.arange('2019-02','2019-03',dtype = 'datetime64[D]')
print(Z)

> ['2019-02-01' '2019-02-02' '2019-02-03' '2019-02-04' '2019-02-05'
 '2019-02-06' '2019-02-07' '2019-02-08' '2019-02-09' '2019-02-10'
 '2019-02-11' '2019-02-12' '2019-02-13' '2019-02-14' '2019-02-15'
 '2019-02-16' '2019-02-17' '2019-02-18' '2019-02-19' '2019-02-20'
 '2019-02-21' '2019-02-22' '2019-02-23' '2019-02-24' '2019-02-25'
 '2019-02-26' '2019-02-27' '2019-02-28']

30 ,怎样计算 ((A+B)*(-A/2))

A = np.ones(3)*1
B = np.ones(3)*2
C = np.ones(3) *3
np.add(A,B,out=A)
np.divide(A,2,out = -A)
np.negative(A,out =A)
np.multiply(A,B,out = A)

> array([-6., -6., -6.])

31,取出随机数组的正数部分的整数部分

Z = np.random.uniform(0,10,10)

print(np.floor(Z))

> [5. 8. 7. 7. 4. 4. 7. 7. 7. 1.]

32, 创见5*5 矩阵,行值为0-4;

Z = np.zeros((5,5))
Z += np.arange(5)
print(Z)

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

33,构建一个生成函数生成10个整数,并转换为数组

def generate():
    for x in range(10):
        yield x
Z = np.fromiter(generate(),dtype =float,count = -1)
print(Z)Z = np.zeros((5,5))
Z += np.arange(5)
print(Z)

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

34 ,创建一个10个元素大小的数组,值为0-1

Z = np.linspace(0,1,11,endpoint = False)[1:]
Z

> array([0.09090909, 0.18181818, 0.27272727, 0.36363636, 0.45454545,
       0.54545455, 0.63636364, 0.72727273, 0.81818182, 0.90909091])

35,判断两个随机数组,是否相等;

A = np.random.randint(0,2,5)
B = np.random.randint(0,2,5)

equal = np.array_equal(A,B)
print(equal)

> False

37,10*2 的随机矩阵,由笛卡尔坐标转化为极坐标

Z = np.random.random((10,2))
X,Y = Z[:,1],Z[:,1]
R = np.sqrt(X**2+Y**2)
T = np.arctan2(Y,X)
print(R)
print(T)

> [0.12396673 1.09640358 0.60171085 0.93054782 0.05433122 0.88863367
 0.10389402 0.45757275 0.53011318 0.17896545]
[0.78539816 0.78539816 0.78539816 0.78539816 0.78539816 0.78539816
 0.78539816 0.78539816 0.78539816 0.78539816]

38, 创建一个10大小的随机向量,把最大值取为0

Z = np.random.random(10)
Z[Z.argmax()] = 0
Z

> array([0.49363055, 0.03622898, 0.19958785, 0.1625108 , 0.        ,
       0.88062849, 0.27145883, 0.42484903, 0.62000329, 0.41577207])

39,给两个数据组,构造为 柯西矩阵(CIJ = 1/(xi-yj))

X = np.arange(8)
Y = X+0.5
C = 1.0/np.subtract.outer(X,Y)
print(np.linalg.det(C))

>3638.1636371179666

40,在一个一维数组中找到与给定值最近的值

Z = np.arange(100)
v = np.random.uniform(0,100)
print(v)
index = (np.abs(Z-v)).argmin()
print(Z[index])

> 14.763688219125658
15

玩转 Numpy 的精选习题 (三)

推送的 20 道题目是比较难的,里面会用到一些不常用的函数,例如 np.bincount()、np.atleast_2d()、np.genfromtxt(),但仔细琢磨的话问题都不大

这 20 道解题步骤中虽然大部分都是一些常见函数,但用的是都是一些进阶语法,有时解一道题需要多个函数混合在一起使用,需要仔细思考它的用法

41,打印一个数组中所有值

np.set_printoptions(threshold =float('inf'))
Z = np.zeros((16,16))
print(Z)
//

42,给定一个标量,在一个向量中找到值最近的元素值

# 42,在向量元素中找离指定元素最近的值:
Z = np.arange(100)
v = np.random.uniform(0,100)
index = (np.abs(Z-v)).argmin()
print(Z[index])
# 
15

43,建立一个结构数组,来表示一个坐标和 RGB 编码

Z =np.zeros(10,
           [('position',[('x',float,1),
                        ('y',float,1)]),
           ('color',[('r',float,1),
                    ('g',float,1),
                    ('b',float,1)])])

print(Z)


#
[((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.))
 ((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.))
 ((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.))
 ((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.))
 ((0., 0.), (0., 0., 0.)) ((0., 0.), (0., 0., 0.))]

44,指定一个100*2的向量矩阵,代表点的坐标,计算矩阵中点到点之间的距离

Z = np.random.random((10,2))
X,Y = np.atleast_2d(Z[:,0],Z[:,1])
D = np.sqrt((X-X.T)**2+(Y-Y.T)**2)
D

#
array([[0.        , 0.98633439, 0.72167275, 0.90188932, 0.13230666,
        0.74692975, 0.06223381, 0.60174661, 0.95391954, 0.92008742],
       [0.98633439, 0.        , 0.77985879, 0.1631969 , 0.90583532,
        0.30879931, 0.92419607, 0.39486349, 1.00587334, 1.0537349 ],
       [0.72167275, 0.77985879, 0.        , 0.61879559, 0.7580086 ,
        0.48464973, 0.68199994, 0.65207576, 0.28058449, 0.2957362 ],
       [0.90188932, 0.1631969 , 0.61879559, 0.        , 0.83909907,
        0.1681398 , 0.83995416, 0.35751067, 0.84286462, 0.89058005],
       [0.13230666, 0.90583532, 0.7580086 , 0.83909907, 0.        ,
        0.69570875, 0.10653016, 0.51251781, 1.01061853, 0.98608667],
       [0.74692975, 0.30879931, 0.48464973, 0.1681398 , 0.69570875,
        0.        , 0.68572148, 0.27153623, 0.73491355, 0.77182869],
       [0.06223381, 0.92419607, 0.68199994, 0.83995416, 0.10653016,
        0.68572148, 0.        , 0.54051085, 0.9237499 , 0.89448777],
       [0.60174661, 0.39486349, 0.65207576, 0.35751067, 0.51251781,
        0.27153623, 0.54051085, 0.        , 0.9285785 , 0.94720901],
       [0.95391954, 1.00587334, 0.28058449, 0.84286462, 1.01061853,
        0.73491355, 0.9237499 , 0.9285785 , 0.        , 0.08212287],
       [0.92008742, 1.0537349 , 0.2957362 , 0.89058005, 0.98608667,
        0.77182869, 0.89448777, 0.94720901, 0.08212287, 0.        ]])

45,将 float32 转化为 int 32

Z = (np.random.rand(10)*100).astype(np.float32)
Y = Z.view(np.int32)
Y[:] = Z
Y

#
[ 3 71 47 23 57 54 67  1 76  6]

46,读取下面文本并转化为二维 array

from io import StringIO

s =  StringIO('''1, 2, 3, 4, 5
    6,  ,  , 7, 8
     ,  , 9,10,11''')
Z  =np.genfromtxt(s,delimiter = ",",dtype = np.int)
print(Z)

#
[[ 1  2  3  4  5]
 [ 6 -1 -1  7  8]
 [-1 -1  9 10 11]]

47,Numpy 中数组枚举的表示方法

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

48,建立一个二维高斯数组

X,Y = np.meshgrid(np.linspace(-1,1,10),np.linspace(-1,1,10))
D = np.sqrt(X*X+Y*Y)
sigma,mu = 1.0,0.0
G = np.exp(-((D-mu)**2/(2.0*sigma**2)))
print(G)


#
[[0.36787944 0.44822088 0.51979489 0.57375342 0.60279818 0.60279818
  0.57375342 0.51979489 0.44822088 0.36787944]
 [0.44822088 0.54610814 0.63331324 0.69905581 0.73444367 0.73444367
  0.69905581 0.63331324 0.54610814 0.44822088]
 [0.51979489 0.63331324 0.73444367 0.81068432 0.85172308 0.85172308
  0.81068432 0.73444367 0.63331324 0.51979489]
 [0.57375342 0.69905581 0.81068432 0.89483932 0.9401382  0.9401382
  0.89483932 0.81068432 0.69905581 0.57375342]
 [0.60279818 0.73444367 0.85172308 0.9401382  0.98773022 0.98773022
  0.9401382  0.85172308 0.73444367 0.60279818]
 [0.60279818 0.73444367 0.85172308 0.9401382  0.98773022 0.98773022
  0.9401382  0.85172308 0.73444367 0.60279818]
 [0.57375342 0.69905581 0.81068432 0.89483932 0.9401382  0.9401382
  0.89483932 0.81068432 0.69905581 0.57375342]
 [0.51979489 0.63331324 0.73444367 0.81068432 0.85172308 0.85172308
  0.81068432 0.73444367 0.63331324 0.51979489]
 [0.44822088 0.54610814 0.63331324 0.69905581 0.73444367 0.73444367
  0.69905581 0.63331324 0.54610814 0.44822088]
 [0.36787944 0.44822088 0.51979489 0.57375342 0.60279818 0.60279818
  0.57375342 0.51979489 0.44822088 0.36787944]]

49,在二维数组中随机放置 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)

#
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 1. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 1.]
 [0. 0. 0. 1. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

50,矩阵减去每一行的平均值

X = np.random.rand(5,10)
Y = X - X.mean(axis =1,keepdims = True)


#Y = X -X.mean(axis=1).reshape(-1,1)
print(Y)

#
[[-0.2854325   0.20882031  0.35568196  0.18316993 -0.40776416 -0.30312722
   0.07405133  0.35347259 -0.09991147 -0.07896078]
 [ 0.04400539 -0.12949299  0.43078155  0.10710735  0.35645354 -0.43201896
   0.1102518  -0.11709654  0.01395583 -0.38394697]
 [-0.07116609 -0.09382485  0.02956884 -0.29241189 -0.05337575 -0.24354029
   0.28228751  0.28369777 -0.22918485  0.3879496 ]
 [ 0.34436033  0.29003034 -0.21067108 -0.09945774  0.0428871  -0.17125693
  -0.28001421  0.40165161 -0.03741505 -0.28011437]
 [ 0.32963488 -0.03061654 -0.36657671 -0.05771164 -0.35016734  0.27941279
   0.19521001  0.44803322 -0.31404906 -0.13316961]]

51,以某一列对整个数组的行进行排序

Z = np.random.randint(0,10,(3,3))
print(Z[Z[:,1].argsort()])

#
[[3 4 8]
 [1 5 2]
 [2 8 2]]

52,判断一个2D数组,是否含有空列

Z = np.random.randint(0,3,(3,10))
print((~Z.any(axis = 0)).any())

#
True

53,在数组中找到给定值的最近值

Z = np.random.uniform(0,1,10)
z = 0.5
m = Z.flat[np.abs(Z-z).argmin()]
print(m)

#
0.507763391604458

54,给定两个二维数组维度分别为 13,31;利用迭代器计算他们的和

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

#
[[0 1 2]
 [1 2 3]
 [2 3 4]]

55,基于索引列表 I ,对应权重 X,进行加权计算得到F

需要注意一下,这里用到 np.bincount() 函数,只有一个参数时,返回一个数组表示每个元素出现的次数;如果设置两个参数则会涉及到加权运算,理解方面比较困难,建议查阅一下官方文档

X = [1,2,3,4,5,6]
I = [1,3,9,3,4,1]
F = np.bincount(I,X)
print(F)

#
[0. 7. 0. 6. 5. 0. 0. 0. 0. 3.]

56,给定一个 图片像素数组(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] # color RGB 进行编码
n = len(np.unique(F))
print(n)
#
4

57,给定一个四维数组,同时计算最后轴元素之和

A =  np.random.randint(0,10,(3,4,3,4))
sum = A.sum(axis = (-2,-1))# 计算最后两列;
print(sum)

# second solutions 
sum = A.reshape(A.shape[:-2]+(-1,)).sum(axis = -1)

#
[[62 59 48 61]
 [53 59 45 48]
 [50 56 71 60]]

58,给定一维数组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)


#
[0.50247673 0.43057174 0.54440853 0.60862306 0.61939138 0.6184843
 0.57271125 0.49704534 0.52671729 0.4849897 ]

59,计算一个点积的对角线

A = np.random.uniform(0,1,(5,5))
B = np.random.uniform(0,1,(5,5))

np.diag(np.dot(A,B))

# Second solutions
np.sum(A*B.T,axis = 1)

#
array([0.49721784, 1.06865483, 0.65669748, 0.78147516, 1.11704931])

60,给定一维向量例如[1,2,3,4,5],在相邻两个值之间加入3个0

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)

#

[1. 0. 0. 0. 2. 0. 0. 0. 3. 0. 0. 0. 4. 0. 0. 0. 5.]

参考链接 :
玩转 Numpy 的精选习题 (一) :https://mp.weixin.qq.com/s/oRyOL4JAC80F4_-V_3laQg

玩转 Numpy 的精选习题 (二) :

玩转 Numpy 的精选习题 (三) :https://mp.weixin.qq.com/s/AIjWBZDjOeorv18Xl4Iz5g

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

玩转 Numpy 的精选习题 的相关文章

  • 零基础小白如何入门python爬虫?3年程序员分享python爬虫学习攻略(文内有福利)

    如果你是非计算机专业 完全是零基础编程 这篇文章就是专门为你写的 内容不长 2分钟就能看完 但还是希望能给你一些帮助 以前从纯白零基础学Python 很多坑都没人踩 现在经常看到很多Python学习群里的新朋友总是喊着 从入门到放弃 觉得学
  • Python办公自动化(四)

    用同样的方式处理一堆文件夹中文件 这并不难 但就是繁 所以在遇到机械式的操作时一定要记得使用Python来合理偷懒 今天我将以处理微博热搜数据来示例如何使用Python批量处理文件夹中的文件 主要将涉及 Python批量读取不同文件夹 Pa
  • Python学习入门基础:文件读写操作、模块和包、异常

    一 文件 文件的概念 文件的基本操作 文件 文件夹的常用操作 文本文件的编码方式 很多人学习python 不知道从何学起 很多人学习python 掌握了基本语法过后 不知道在哪里寻找案例上手 很多已经做案例的人 却不知道如何去学习更加高深的
  • Python所有方向的学习路线图,让Python初学者少走弯路

    举个例子 如果你要学习爬虫 那么你就去学Python爬虫学习路线图上面的知识点 这样学下来之后 你的知识体系是比较全面的 比起在网上找到什么就学什么 容易造成重复学 有时候也会学到一些用处不大的东西 还有一点就是 有了学习路线图 你就能够明
  • 编程15年40岁程序员的我终于在压力下被迫转行了

    本人今年40岁多了 中山大学计算机小硕 已经从事it工作15年多 最后一次工作是2017年 创业 互联网教育方向 2020年失败关闭公司 创业失败后 在家沉淀了几个月 然后决定再次找工作 前几年频繁接到猎头电话的我 海投了不少公司 结果都渺
  • 零基础如何高效的学习Python,这是我给你的建议:真心诉说 分享资料

    IT 行业的变化快是众人皆知的 需要持续去学习新的知识内容 但是 往往我们工作之后 经常发现学习的东西很少了 学习效率非常低 感觉自己到了一个瓶颈期 久而久之 就演变成 一年工作经验 重复去用十年 的怪圈 不管你是已经工作了 还是正在学习中
  • Django Vue corsheaders跨域问题

    跨域问题 记录一下在我自己的django vue项目里面出现的跨域问题 我的项目之前一直是在本地跑的 因为需要上线测试 所以我就运行在同一个vlan里面 ip段 192 168 1 0 24 突然发现存在跨域问题 我django的接口访问被
  • 玩转 Numpy 的精选习题

    玩转 Numpy 的精选习题 一 1 打印 numpy 版本 import numpy as np print np version gt 1 16 5 2 创建 10 个元素空向量 Z np zeros 10 print Z gt 0 0
  • Python 下载的 11 种姿势

    1 使用requests 你可以使用requests模块从一个URL下载文件 考虑以下代码 你只需使用requests模块的get方法获取URL 并将结果存储到一个名为 myfile 的变量中 然后 将这个变量的内容写入文件 2 使用wge
  • GitHub十大Python项目推荐,Star最高26.4k

    编写 Python 代码的乐趣应该是看到简短 简洁 易读的类 这些类用少量清晰的代码来执行大量的操作 而不是那些让读者厌烦的大量琐碎代码 在相当长的一段时间内 世界各地的开发人员在他们的大多数项目中都倾向于使用 Python 编程语言的易用
  • 使用ctypes模块进行键盘钩取

    原理 使用user32 dll提供的SetWindowsHookExA函数 可以设置钩子 当有消息到来或发生鼠标 键盘输入事件时 操作系统提供了中间拦截机制 这称为 钩子 从功能上实现这种机制的函数称为钩子过程 回调函数 操作系统支持为一个
  • 解读YOLO v7的代码(三)损失函数

    在前两篇博客中我分析了YOLO v7的模型结构以及训练数据的准备 这里将对损失函数的代码进行分析 在train py中 我们可以看到以下的代码是进行损失值计算的 if loss ota not in hyp or hyp loss ota
  • 49个Python的常见操作/技巧/例子

    17个Python的常见操作 技巧 很多读者都知道 Python 是一种高级编程语言 其设计的核心理念是代码的易读性 以及允许编程者通过若干行代码轻松表达想法创意 实际上 很多人选择学习 Python 的首要原因是其编程的优美性 用它编码和
  • Python for 3dMax加载图像文件并读取像素值

    使用Python for 3dMax加载和显示图像文件的示例 在这种情况下 EXR图像文件与3dMax文件位于同一目录中 from MaxPlus import BitmapManager image file path r BG park
  • Python爬虫之入门保姆级教程,学不会我去你家刷厕所

    今天这个教程采用最简单的爬虫方法 适合小白新手入门 代码不复杂 文章目录 今天这个教程采用最简单的爬虫方法 适合小白新手入门 代码不复杂 首先打开咋们的网站 一 导入相关库 requests库 二 相关的参数 url headers 三 向
  • Python常见面试题

    Python 30道高频面试题及详细解答 1 如何用一行代码生成 1 3 5 7 9 11 13 15 17 19 2 写一个等差数列 产生一个首项为8 公差为12 末项不大于100的列表 3 一行代码求1到1000内的整数和 4 字典按V
  • Python编程基础 第三章 编程练习 编写程序实现以下功能:输入若干个整数(输入0结束),将不能被3整除的整数相加,并将求和结果输出。要求判断一个整数n是否能被另一个整数m整除的功能用一个函数实现。

    1 编写程序实现以下功能 输入若干个整数 输入0结束 将不能被3整除的整数相加 并将求和结果输出 要求判断一个整数n是否能被另一个整数m整除的功能用一个函数实现 2分 题目内容 编写程序实现以下功能 输入若干个整数 输入0结束 将不能被3整
  • python编程基础-task4-FOR、IF以及while

    一 IF语句 avg 90 math 95 Chinese 85 if math lt Chinese print 语文更好 if math gt Chinese print 数学更好 Chinese 5 if avg Chinese pr
  • 使用正则表达式爬虫抓取猫眼电影排行Top100

    目标站点分析 分析网址 首页 https maoyan com 点击榜单 https maoyan com board 点击Top100 https maoyan com board 4 目标站点为 https maoyan com boa
  • Huggingface训练Transformer

    在之前的博客中 我采用SFT 监督优化训练 的方法训练一个GPT2的模型 使得这个模型可以根据提示语进行回答 具体可见博客召唤神龙打造自己的ChatGPT gzroy的博客 CSDN博客 Huggingface提供了一个TRL的扩展库 可以

随机推荐

  • STM32项目 -- 选题分享(部分)

    前言 分享部分STM32项目选题以及实现效果 暂时没有分享代码 列表 编号 项目名称 难度 使用器件 实现效果 1 基于STM32的智能万用表设计 3 STM32F103C8T6 OLED 1 测量电压 2 OLED显示测量值 3 实现层级
  • ASP.NET-----Repeater数据控件的用法总结

    一 Repeater控件的用法流程及实例 1 首先建立一个网站 新建一个网页index aspx 2 添加或者建立APP Data数据文件 然后将用到的数据库文件放到APP Data文件夹中 3 打开数据库企业管理器 数据库服务器为loca
  • 【帧同步】关于状态同步的经验分享

    方案 低延迟环境下 比如国内 局域网情况下 写个同步那都不是难事 是个客户端看点书就会写了 难点在于 如何去处理 高延迟 以及及时响应的情况 我举个例子 fps或者tank游戏中 子弹和炮弹的射速是很快的 如果两边在对轰过程中 又碰到了 附
  • Qt (ui界面)信号与槽函数 组件连接

    重点 信号与槽连接机制 难点 信号与槽函数的 参数使用 头函数 ifndef WIDGET H define WIDGET H include
  • 登录页面,表单提交,参数不显示

    一开始的form
  • curl下载文件

    我的个人博客 逐步前行STEP curl url o filename progress 下载url的内容到文件filename中 并显示下载进度
  • 深度学习面试八股文(2023.9.06)

    一 优化器 1 SGD是什么 批梯度下降 Batch gradient descent 遍历全部数据集算一次损失函数 计算量开销大 计算速度慢 不支持在线学习 随机梯度下降 Stochastic gradient descent SGD 每
  • 三种常用的排序方法图解及C语言实现(选择排序,冒泡排序,快速排序)

    选择排序 冒泡排序 快速排序 选择排序 选择排序是最简单直观的一种算法 选择排序是不稳定排序 基本思想 首先在未排序序列中找到最小 大 元素 存放到排序序列的起始位置 然后 再从剩余未排序元素中继续寻找最小 大 元素 然后放到已排序序列的末
  • 迷宫 蓝桥杯 602

    题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 下图给出了一个迷宫的平面图 其中标记为 1 的为障碍 标记为 0 的为可以通行的地方 010000 000100 001001 110000 迷宫的入口为左上
  • Java中的锁详解说明

    转自 Java中的锁详解说明 下文笔者讲述java中锁的详解 如下所示 java锁简介 锁与synchronized同步块具有同样的功能 是一种线程同步机制 但锁比Java中的synchronized同步块更复杂 因为锁是由synchron
  • 【Fiddler】从零开始学习Fiddler

    文章目录 Fiddler的工作原理 Fiddler的代理模式 1 流模式 Streaming 2 缓冲模式 Buffering Fiddler工具条按钮介绍 如何使用Fiddler抓取https包 如何使用Fiddler抓取手机包 Fidd
  • conda & yaml

    conda导出已有环境 环境会被保存在environment yaml文件中 conda env export gt environment yaml 当我们想再次创建该环境 或根据别人提供的 yaml文件复现环境时 就可以通过下面的命令来
  • tensorflow中tf.keras.models.Sequential()用法

    tensorflow中tf keras models Sequential 用法 Sequential 方法是一个容器 描述了神经网络的网络结构 在Sequential 的输入参数中描述从输入层到输出层的网络结构 model tf kera
  • 第一个实例:QT实现汽车电子仪表盘

    目录 1 实现效果 1 1 视频演示 1 2 实现效果截图 2 生成的安装程序 3 功能概述 4 具体实现 5 QT扩展介绍 5 1 QT介绍 5 2 QT历史发展 5 3 QT平台支持 5 4 Qt Creator 5 5 优势 5 5
  • java.lang.reflect.InvocationTargetException

    产生原因 1 包冲突 有重复包或者缺少包 2 项目jdk和部署jdk版本不一样 导致InvocationTargetException异常信息返回一个空值 没有调用invoc里的重写消息方法 3 映射文件发生改变 对于不同原因的解决 1 包
  • 最小生成树算法之Prim算法

    生成树 一个连通图的生成树是一个极小连通子图 它含有图中全部n个顶点和构成一棵树的 n 1 条边 连通图由一次遍历就可以产生生成树 由深度优先遍历得到的生成树称为深度优先生成树 由广度优先遍历得到的生成树称为广度优先生成树 一个连通图的生成
  • 为什么不用SSH了?SSH过时了吗?

    ssh最重要的还是后端处理 前端渲染部分已经被如今的互联网公司废掉了 例如用Vue等框架替代 而且随着docker一波热 相比早期 一站到底 的大而全 现在很多非核心的模块 被细化拆分 人称微服务 互联网公司节奏很快 迭代也很快 天生对小而
  • 计算机视觉项目-文档扫描OCR识别

    欢迎来到本博客 本次博客内容将继续讲解关于OpenCV的相关知识 作者简介 目前计算机研究生在读 主要研究方向是人工智能和群智能算法方向 目前熟悉python网页爬虫 机器学习 计算机视觉 OpenCV 群智能算法 然后正在学习深度学习的相
  • Python报错:[function object has no attribute plot]原因解释

    错误的翻译为 对象没有这个属性 plot 先看一个原先错的小例子的代码及结果 然后再看一下自己python的文件matplotlib的目录 现在应该一目了然了吧 错误的原因我把matplotlib里面的pyplot类中的plot 方法as为
  • 玩转 Numpy 的精选习题

    玩转 Numpy 的精选习题 一 1 打印 numpy 版本 import numpy as np print np version gt 1 16 5 2 创建 10 个元素空向量 Z np zeros 10 print Z gt 0 0