统计机器学习-3-numpy100题(代码片段)

esc_ai esc_ai     2022-12-04     579

关键词:

numpy 100道练习题

这100道练习题从numpy的mailing list、Stack Overflow和numpy官方文档收集而来,其目的是提供一个快速入门的参考文档为numpy学习者,也可以用作教学练习题。

如果你发现错误或者有更好的解法,欢迎在github上提交issue: https://github.com/rougier/numpy-100

1.如何导入numpy包?

import numpy as np

2.打印numpy版本和配置信息

print(np.__version__)
1.15.4
np.show_config()
blas_mkl_info:
  NOT AVAILABLE
blis_info:
  NOT AVAILABLE
openblas_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
blas_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_mkl_info:
  NOT AVAILABLE
openblas_lapack_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]
lapack_opt_info:
    libraries = ['openblas', 'openblas']
    library_dirs = ['/usr/local/lib']
    language = c
    define_macros = [('HAVE_CBLAS', None)]

3.创建一个10维的空向量

Z = np.zeros(10)
print(Z)
[0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]

4.查看一个矩阵占用内存大小

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

5.查看方法帮助信息

%run `python -c "import numpy; numpy.info(numpy.add)"`
ERROR:root:File `'`python.py'` not found.

6.创建一个10维的空向量,第5个元素值置1

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

7.创建一个向量,值为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]

8.反转一个向量

Z = np.arange(10)
Z = Z[::-1]
print(Z)
[9 8 7 6 5 4 3 2 1 0]

9.创建一个3*3的矩阵,值为0-8

Z = np.arange(0,9).reshape(3,3)
print(Z)
[[0 1 2]
 [3 4 5]
 [6 7 8]]

10.查找向量中的非负元素的位置

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

11.创建一个3*3的单位矩阵

Z = np.eye(3)
print(Z)
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

12.创建一个3x3x3的随机数组

Z = np.random.random((3,3,3))
print(Z)
[[[0.13854955 0.99835168 0.14964813]
  [0.81025815 0.26882349 0.17608854]
  [0.50149982 0.30969241 0.79233029]]

 [[0.25014841 0.62259016 0.08474709]
  [0.41144453 0.07678162 0.4215841 ]
  [0.95705938 0.74772762 0.61415939]]

 [[0.10280342 0.5927821  0.67836604]
  [0.57329144 0.57727532 0.68117433]
  [0.7110556  0.38961554 0.8672104 ]]]

13.创建一个10*10的二维数组,找到其中的最大值和最小值

Z = np.random.random((10,10))
print(Z)
Zmin, Zmax = Z.min(), Z.max()
print(Zmin,Zmax)
[[0.25561564 0.34677381 0.37291065 0.36407523 0.57075556 0.74616685
  0.29275394 0.97174189 0.70312293 0.95137757]
 [0.32930664 0.76680212 0.03411341 0.6891707  0.07525525 0.63305991
  0.56937379 0.50935112 0.44551824 0.16113358]
 [0.38287982 0.43948445 0.45147072 0.45343676 0.84147744 0.84405623
  0.17612155 0.44853487 0.59365967 0.21382305]
 [0.57737686 0.76764731 0.52924878 0.43832771 0.43232812 0.27582494
  0.81809636 0.48204092 0.72446075 0.17121314]
 [0.78361539 0.3670213  0.43745526 0.79392565 0.94043517 0.98780196
  0.87732521 0.09725379 0.5779913  0.1794939 ]
 [0.47516542 0.14197428 0.81696136 0.28916184 0.35305486 0.26131989
  0.38968154 0.69896065 0.75537356 0.55963109]
 [0.26552027 0.55082818 0.32947654 0.04898929 0.2270137  0.25364827
  0.38164323 0.41891464 0.12324579 0.90304341]
 [0.2131408  0.22453357 0.37561031 0.16563801 0.03372727 0.46461429
  0.49478784 0.57528389 0.28509153 0.05824959]
 [0.22434699 0.62551763 0.76722029 0.22688218 0.91387016 0.70209686
  0.79776406 0.66136601 0.29725645 0.77543245]
 [0.27549283 0.37891796 0.26681741 0.07157089 0.89681116 0.05042483
  0.04756321 0.224474   0.44364862 0.44257503]]
0.03372726599172826 0.9878019616433998

14.创建一个30维的随机向量,找到其中的平均值

Z = np.random.random(30)
m = Z.mean()
print(m)
0.5046588177918117

15.创建一个二维数组,内部为0边为1

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

16.给一个矩阵加边(全为0)

Z = np.ones((5,5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=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.]]

17.计算下列表达式的结果

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

18.创建一个5x5的矩阵,对角线下面的一行为[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]]

19.创建一个8x8的矩阵,用棋盘格模式填充

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

20.创建一个6x7x8的数组,第100个元素的坐标是什么?

print(np.unravel_index(100,(6,7,8)))
(1, 5, 4)

21.使用tile函数创建一个8x8的棋盘矩阵

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

22.标准化一个5x5的随机矩阵

Z = np.random.random((5,5))
print(Z)
print(np.mean(Z))
print(Z - np.mean(Z))
print(np.std(Z))
Z = (Z - np.mean(Z))/(np.std(Z))
print(Z)
[[0.30044185 0.71441592 0.60760487 0.36140299 0.70529362]
 [0.95490502 0.68696356 0.87501537 0.11260691 0.63311754]
 [0.4172747  0.12554581 0.06697218 0.59951544 0.63208388]
 [0.29634218 0.59950745 0.26741324 0.55475958 0.53740619]
 [0.77365458 0.3582571  0.04332674 0.65957491 0.8489008 ]]
0.5092920976751807
[[-0.20885025  0.20512382  0.09831277 -0.1478891   0.19600152]
 [ 0.44561292  0.17767147  0.36572328 -0.39668518  0.12382544]
 [-0.0920174  -0.38374629 -0.44231992  0.09022335  0.12279178]
 [-0.21294992  0.09021535 -0.24187886  0.04546748  0.02811409]
 [ 0.26436248 -0.15103499 -0.46596535  0.15028281  0.3396087 ]]
0.25529712546277883
[[-0.81806736  0.80347093  0.38509159 -0.57928229  0.76773885]
 [ 1.74546782  0.69593994  1.43253973 -1.55381767  0.48502482]
 [-0.36043255 -1.50313597 -1.73256914  0.35340526  0.48097596]
 [-0.83412579  0.35337394 -0.9474406   0.17809633  0.11012304]
 [ 1.03550903 -0.59160476 -1.82518841  0.58865846  1.33024883]]

23.创建一个描述颜色的自定义数据类型

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

24.矩阵相乘:一个5x3的矩阵乘上3x2的矩阵

Z = np.dot(np.ones((5,3)), np.ones((3,2)))
print(Z)
# python 3.5以上可以用另外一种方式
Z = np.ones((5,3)) @ np.ones((3,2))
[[3. 3.]
 [3. 3.]
 [3. 3.]
 [3. 3.]
 [3. 3.]]

25.给定一个1维数组,把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]

26.下列脚本的输出是什么?

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

# https://stackoverflow.com/questions/39552458/python-sum-has-a-different-result-after-importing-numpy
9
10

27.Z是零向量,下列哪些表达式是合法的?

Z = zeros(5)
print(Z)
print(Z**Z)
# 2<<Z>>2
print(Z<-Z)
print(1j*Z)
print(Z/1/1)
#print(Z<Z>Z)
[0. 0. 0. 0. 0.]
[1. 1. 1. 1. 1.]
[False False False False False]
[0.+0.j 0.+0.j 0.+0.j 0.+0.j 0.+0.j]
[0. 0. 0. 0. 0.]

28.下列表达式的结果是什么?

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
[-9.22337204e+18]


/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in true_divide
  """Entry point for launching an IPython kernel.
/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:2: RuntimeWarning: divide by zero encountered in floor_divide

29. 数组向上取整

Z = np.random.uniform(-10,+10,10)
print(Z)
print(np.ceil(np.abs(Z)))
print (np.copysign(np.ceil(np.abs(Z)), Z))
[ 7.91394163 -9.96084271 -1.9621627   3.78892767 -7.99546695 -3.27477486
  5.69418011 -0.97745194  7.17444217  5.91949544]
[ 8. 10.  2.  4.  8.  4.  6.  1.  8.  6.]
[  8. -10.  -2.   4.  -8.  -4.   6.  -1.   8.   6.]

30.找到两个数组的公共元素

Z1 = np.random.randint(0,10,10)
print(Z1)
print(Z2)
Z2 = np.random.randint(0,10,10)
print(np.intersect1d(Z1,Z2))
[2 7 1 7 3 8 8 8 1 8]



---------------------------------------------------------------------------

NameError                                 Traceback (most recent call last)

<ipython-input-36-a190b35a16f9> in <module>
      1 Z1 = np.random.randint(0,10,10)
      2 print(Z1)
----> 3 print(Z2)
      4 Z2 = np.random.randint(0,10,10)
      5 print(np.intersect1d(Z1,Z2))


NameError: name 'Z2' is not defined

31.如何忽略numpy提醒

# Suicide mode on
defaults = np.seterr(all='ignore')
Z = np.ones(1)/0
print(Z)

# Back to sanity
_ = np.seterr(**defaults)

#An equivalent way, with a context manager:

with np.errstate(divide='ignore'):
    Z = np.ones(1) / 0
    

32.下列表达式是否正确

print(np.sqrt(-1))
print(np.emath.sqrt(-1))
np.sqrt(-1) == np.emath.sqrt(-1)

33. 取得昨天、今天、明天的日期

yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
today     = np.datetime64('today', 'D')
tomorrow  = np.datetime64('today', 'D') + np.timedelta64(1, 'D')
print(yesterday,today,tomorrow)

34.计算( (A+B)*-(A/2)),不使用复制

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

36.五种方法提取一个数组的整数部分

Z = np.random.uniform(0,10,10)
print(Z)
print(Z - Z%1)
print(np.floor(Z))
print(np.ceil(Z)-1)
print(Z.astype(int))
print(np.trunc(Z))

37.创建一个5*5的矩阵,每一行的值为0到4

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

38.创建一个函数生成器生成10个整数,用这个函数生成一个数组

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

39. 创建一个10维的向量,取值在0到1之间,不包含0和1

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

40.创建一个10维的随机向量并排序

Z = np.random.random(10)
Z.sort()
print(Z)

41.怎样对数组求和比np.sum()更快?

Z = np.arange(10)
np.add.reduce(Z)

42.检查随机数组A和B是否相等

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

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

# Checking both the shape and the element values, no tolerance (values have to be exactly equal)
equal = np.array_equal(A,B)
print(equal)

43.令一个数组不可变

Z = np.zeros(10)
#Z.flags.writeable = False
Z[0]=1
print(Z)

44.将笛卡尔坐标转换为极坐标

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

45.创建一个10维的随机向量,并用0取代最大值

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

46.创建一个结构化数组,其x和y坐标覆盖[0,1] x [0,1]区域

Z = np.zeros((5,5), [('x',float),('y',float)])
print(Z)
Z['x'], Z['y'] = np.meshgrid(np.linspace(0,1,5),
                             np.linspace(0,1,5))
print(Z)

机器学习100天:003数据预处理之处理缺失值(代码片段)

...型的一类值,表示空值可能是由于在样本收集的时候没有统计到该特征。对于NaN值,最简单粗暴的做法是直接删除对应的样本,但我们一般不这么做。常见的做法是对NaN进行 查看详情

机器学习100天:003数据预处理之处理缺失值(代码片段)

...型的一类值,表示空值可能是由于在样本收集的时候没有统计到该特征。对于NaN值,最简单粗暴的做法是直接删除对应的样本,但我们一般不这么做。常见的做法是对NaN进行 查看详情

统计机器学习-4-三维绘图(代码片段)

用python绘制三维函数图像:Z=X2+Y2Z=X^2+Y^2Z=X2+Y2importmatplotlibasmplfrommpl_toolkits.mplot3dimportAxes3Dimportnumpyasnpimportmatplotlib.pyplotaspltfig=plt.figure()ax=fig.gca(pr 查看详情

机器学习100天(二十二):022分类模型评价指标-python实现(代码片段)

机器学习100天!今天讲的是:分类模型评价指标-Python实现!《机器学习100天》完整目录:目录打开spyder,首先,导入标准库。importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.metricsimportaccuracy_scorefromsklearn.metricsimportprecision_scorefromsklear 查看详情

机器学习100天(二十二):022分类模型评价指标-python实现(代码片段)

机器学习100天!今天讲的是:分类模型评价指标-Python实现!《机器学习100天》完整目录:目录打开spyder,首先,导入标准库。importnumpyasnpimportmatplotlib.pyplotaspltfromsklearn.metricsimportaccuracy_scorefromsklearn.metricsimportprecision_scorefromsklear 查看详情

牛客编程题python机器学习(入门例题5题)(代码片段)

【牛客编程题】Python机器学习(入门例题5题)做题链接:https://www.nowcoder.com/exam/oj?page=1&tab=Python篇&topicId=329文章目录AI1鸢尾花分类_1AI2鸢尾花分类_2AI3决策树的生成与训练-信息熵的计算AI4决策树的生成... 查看详情

机器学习100天(十八):018逻辑回归python实战(代码片段)

机器学习100天,今天讲的是:逻辑回归Python实战。我们打开spyder。首先,导入标准库和数据集。#导入标准库importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspd#导入数据集dataset=pd.read_csv(\'data.csv\')X=dataset.iloc[:, 查看详情

机器学习100天(十八):018逻辑回归python实战(代码片段)

机器学习100天,今天讲的是:逻辑回归Python实战。我们打开spyder。首先,导入标准库和数据集。#导入标准库importnumpyasnpimportmatplotlib.pyplotaspltimportpandasaspd#导入数据集dataset=pd.read_csv(\'data.csv\')X=dataset.iloc[:, 查看详情

机器学习特征工程之特征构造:构造统计特征(代码片段)

机器学习特征工程之特征构造:构造统计特征数据决定了模型预测的上限,而算法只是在逼近这个极限而已。这里的数据指的就是经过特征工程所得到的数据。机器学习的核心就是特征构造。好的数据是从原始数据抽取出来对预... 查看详情

机器学习100天(三十九):039朴素贝叶斯-处理连续数据(代码片段)

《机器学习100天》完整目录:目录机器学习100天,今天讲的是:朴素贝叶斯-处理连续数据!打开spyder,新建一个naive_bayes_gauss.py脚本。首先导入标准库。然后导入数据集,这里我们选择鸢尾花数据集。数据集的下载地址:数据集... 查看详情

sparkmllib机器学习(代码片段)

... 局部向量3.2 标记点3.3 局部矩阵3.4 分布式矩阵4. 基础统计4.1 摘要统计4.2 相关统计1. 皮尔森相关系数2. 斯皮尔森秩相关系数4.3 分层抽样4.4 假设校验4.5 随机数生成5.分类和回归5.1 数学公式5.2 线性回归1.简单线性回归2.... 查看详情

sparkmllib机器学习(代码片段)

... 局部向量3.2 标记点3.3 局部矩阵3.4 分布式矩阵4. 基础统计4.1 摘要统计4.2 相关统计1. 皮尔森相关系数2. 斯皮尔森秩相关系数4.3 分层抽样4.4 假设校验4.5 随机数生成5.分类和回归5.1 数学公式5.2 线性回归1.简单线性回归2.... 查看详情

机器学习100天(二十七):027python中的函数和类(代码片段)

机器学习100天,今天讲的是:Python中的函数和类。《机器学习100天》完整目录:目录为了方便后面机器学习算法编写程序,秉承从零开始的原则,我们在此节简单介绍一下Python的编程知识。一、函数的定义我们打开spyder。Python中... 查看详情

机器学习100天(二十七):027python中的函数和类(代码片段)

机器学习100天,今天讲的是:Python中的函数和类。《机器学习100天》完整目录:目录为了方便后面机器学习算法编写程序,秉承从零开始的原则,我们在此节简单介绍一下Python的编程知识。一、函数的定义我们打开spyder。Python中... 查看详情

机器学习100天(二十七):027python中的函数和类(代码片段)

机器学习100天,今天讲的是:Python中的函数和类。《机器学习100天》完整目录:目录为了方便后面机器学习算法编写程序,秉承从零开始的原则,我们在此节简单介绍一下Python的编程知识。一、函数的定义我们打开spyder。Python中... 查看详情

机器学习100天:002数据预处理之导入数据集(代码片段)

机器学习100天,今天讲的是:数据预处理之导入数据集。首先,我们打开spyder。新建一个load_data.py脚本。第一步,导入标准库机器学习常用的标准库有3个:第一个:numpy,用于数据处理。第二个:matplotlib.pyplot,用于画图。第三... 查看详情

机器学习100天:002数据预处理之导入数据集(代码片段)

机器学习100天,今天讲的是:数据预处理之导入数据集。首先,我们打开spyder。新建一个load_data.py脚本。第一步,导入标准库机器学习常用的标准库有3个:第一个:numpy,用于数据处理。第二个:matplotlib.pyplot,用于画图。第三... 查看详情

机器学习100天(三十三):033kd树的python实现(代码片段)

《机器学习100天》完整目录:目录机器学习100天,今天讲的是:KD树的Python实现!打开spyder,我们新建一个kd_tree.py脚本。首先,我们新建一个类,名为Node,它定义了KD树节点中包含的数据结构。例如数据、深度、左节点、右节点... 查看详情