集智专栏
资源加载中,请稍后...
集智专栏

[2018.03.22直播] Python数值计算:NumPy(II)

Kaiser

往期回顾

负基础入门Python系列汇总


直播时间 21:00

1. 页内观看(仅视频)

2. 完整观看(可发弹幕):Python数值计算:NumPy(II)

3. Bilibili直播



28. NumPy数组操作

28.1 .tolist()

程序说明
ndarray <-> list
示例代码
import numpy as np arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]]) # list()? arr_lst0 = list(arr) print(arr_lst0) # .tolist() arr_lst1 = arr.tolist() print(arr_lst1)


28.2 missing values

程序说明
nan/inf
示例代码
import numpy as np arr = np.array([[ 1., 2., 3., 4.], [ 3., 4., 5., 6.], [ 5., 6., 7., 8.]]) arr[2,2] = np.nan arr[2,3] = np.inf missing = np.isnan(arr) | np.isinf(arr) arr[missing] = 0 arr


28.3 statistics

程序说明
mean/max/min
示例代码
arr = np.array([[ 1., 2., 3., 4.], [ 3., 4., 5., 6.], [ 5., 6., 7., 8.]]) # 平均值 print(arr.mean()) # 最大值 print(arr.max()) # 最小值 print(arr.min()) # 最大值(列) print(np.amax(arr, axis=0)) # 最大值(行) print(np.amax(arr, axis=1))


28.4 new array

程序说明
.copy()
示例代码
board = [[3, 0, 1], [3, 0, 1], [0, 2, 1], [0, 2, 0]] board_atk = board board_atk[0,0] = 0 print(board)


28.5 arange()

程序说明
arange()
示例代码
import numpy as np print('np.arange(5) -> ', np.arange(5)) print('\nnp.arange(0, 10) -> ', np.arange(0, 10)) print('\nnp.arange(0, 10, 2) -> ', np.arange(0, 10, 2)) print('\nnp.arange(0, 10, -1) -> ', np.arange(10, 0, -1))


28.6 linspace()/logspace()

程序说明
linspace/logspace
示例代码
import numpy as np print('np.linspace(0, 50, 11) -> ', np.linspace(0, 50, 11)) print('\nnp.linspace(0, 50, 10) -> ', np.linspace(0, 50, 10)) print('\nnp.logspace(0, 50, 10) -> ', np.logspace(0, 50, 10))


Quiz 30. 下一盘很大的棋


继续之前的“舰娘”游戏,这次我们要来检验系统随机生成的初识局面是不是符合游戏规则。

  1. 舰队Collection:

每局游戏初始的舰船数量及尺寸(括号内)如下:

  • 1艘战列舰(4)
  • 2艘巡洋舰(3)
  • 3艘驱逐舰(2)
  • 4艘潜水艇(1)
  1. 船体必须是直线,不能带拐弯:


  1. 两艘船不能相邻(对角也不行)



程序说明
Battleship validator
示例代码
import numpy as np def valid_battleship(board): # >>>> show me the code <<<< # >>>> show me the code <<<<
正确答案
import numpy as np def valid_battleship(board): board_arr = np.array(board) if board_arr.sum() != 20: return False board_arr = np.pad(board_arr, 1, 'constant') filter_battleship = np.pad([[1], [1], [1], [1]], 1, 'constant', constant_values=-1) filter_cruiser = np.pad([[1], [1], [1]], 1, 'constant', constant_values=-1) filter_destroyer = np.pad([[1], [1]], 1, 'constant', constant_values=-1) filter_submarine = np.pad([[1]], 1, 'constant', constant_values=-1) def convolution(image, kernel, flag): count = 0 image_height = image.shape[0] image_width = image.shape[1] kernel_height = kernel.shape[0] kernel_width = kernel.shape[1] for i in range(image_height - kernel_height): for j in range(image_width - kernel_width): receptive_field = board_arr[i:i + kernel_height, j:j + kernel_width] if (receptive_field * kernel).sum() == flag: count += 1 #print(receptive_field) #print((receptive_field * kernel).sum()) return count def search_ship(): ship_counts = {4:0, 3:0, 2:0, 1:0} filters = [filter_battleship, filter_battleship.T, filter_cruiser, filter_cruiser.T, filter_destroyer, filter_destroyer.T, filter_submarine] ship_sizes = [4,4,3,3,2,2,1] for i,j in zip(filters, ship_sizes): ship_counts[j] += convolution(board_arr, i, j) return ship_counts return search_ship() == {1: 4, 2: 3, 3: 2, 4: 1}
程序验证过程
board0 = [[1, 0, 0, 0, 0, 1, 1, 0, 0, 0], [1, 0, 1, 0, 0, 0, 0, 0, 1, 0], [1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 1, 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]] board1 = [[1, 0, 0, 0, 0, 1, 1, 0, 0, 0], [1, 0, 1, 0, 0, 0, 0, 0, 1, 0], [1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 1, 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]] board2 = [[1, 0, 0, 0, 0, 1, 1, 0, 0, 0], [1, 0, 1, 0, 0, 0, 0, 0, 1, 0], [1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 1, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 1, 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]] board3 = [[0, 0, 0, 0, 0, 1, 1, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0], [0, 0, 1, 0, 1, 1, 1, 0, 1, 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, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 1, 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]] board4 = [[1, 0, 0, 0, 0, 1, 1, 0, 0, 0], [1, 0, 1, 0, 0, 0, 0, 0, 1, 0], [1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0, 0, 0, 1, 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]] board5 = [[1, 0, 0, 0, 0, 1, 1, 0, 0, 0], [1, 0, 0, 0, 0, 0, 0, 0, 1, 0], [1, 1, 0, 0, 1, 1, 1, 0, 1, 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, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 1, 0, 1, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]] board6 = [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0], [1, 0, 1, 0, 0, 0, 0, 0, 1, 0], [1, 0, 1, 0, 1, 1, 1, 0, 1, 0], [1, 0, 1, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 1, 1, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0], [0, 0, 0, 1, 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]] valid_battleship(board0) == True and valid_battleship(board1) == False and valid_battleship(board2) == False and valid_battleship(board3) == False and valid_battleship(board4) == False and valid_battleship(board5) == False and valid_battleship(board6) == False
提示信息
首先检查船只总数,然后分别扫描每种船型。


推荐阅读

CFD Python: 12 steps to Navier-Stokes equations

您也许喜欢这些文章

集智专栏

教你用CPT算法解决序列预测问题

发表至数据科学
某宝怎么知道我要买这个?后天天气怎么预测?
集智专栏

盘点一下不到100行的给力代码

发表至趣味项目
只需10行Python代码,我们就能实现计算机视觉中目标检测
集智专栏

[Scikit-learn教程] 01 快速入门

发表至系列教程
从本篇文章开始,我们将在一系列的文章中介绍使用scikit-learn——一个著名的机器学习库件来完成机器学习过程的各种方法,包括算法的选择、模型的构建与训练、训练结果的评估等等。同时提供丰富的案例与小测试,帮助读者深刻掌握机器学习与数据挖掘领域中的各类基础知识与技能。

文章评论(3)

新用户374 发表于 2月前回复
已经2个月没有直播了
新用户934 发表于 5月前回复
为什么我们这里 arr[2,2] = np.nan 出现 ValueError: cannot convert float NaN to integer 这个错误,怎么解决?
新用户19 发表于 6月前回复
2. 完整观看(可发弹幕):Python数值计算:NumPy(II) 好像10分钟没内容呀? 光看代码不太明白 28.4 new array 想说明啥?