- 博客(42)
- 收藏
- 关注
原创 Numpy 和 TensorFlow 中 broadcasting 机制的一个有趣例子
TensorFlow 中 Tensor 间的运算规则相同 shape Tensor 间的所有算术运算都是 element-wise 的不同 shape (但 dim 0 相同) Tensor 间的运算称为广播 (broadcasting), Tensor 与 Scalar 间的运算就是其中一种在运算时要求各个 Tensor 的数据类型相同一般的广播是很好理解的,但是有一种特殊情况乍一看...
2020-04-26 00:54:02
243
原创 一些常用的 numpy/TensorFlow 函数
记录一些在计算机视觉框架搭建中有用的函数1. y, x = np.mgrid[:feature_map_size[0], :feature_map_size[1]]用于生成 feature map 上 anchor 的中心点阵列2. x = np.expand_dims(x, axis=-1)用于为张量添加额外的维度,以便下一步的计算中维度匹配3. classes = tf.argmax...
2020-04-24 17:01:36
275
原创 C++ 中使用指针引用的必要性和例子
在用C++实现二叉查找树delete操作时出现了奇怪的行为,要被删除掉的节点并没有被删除,而是值变成了0,一番查找确认算法本身没问题,最后发现是向函数传递参数时出现的错误,函数应该接收的是指针引用或者指针的指针,但我的实现接收的是普通指针,先贴正确代码class TreeNode{public: TreeNode(int v): val(v), left(NULL), right(NULL...
2019-12-06 16:51:00
312
原创 解决 nvprof 报错ERR_NVGPUCTRPERM - The user does not have permission to profile on the target device
做 CUDA 开发,使用工具 profile 程序性能是必不可少的,其中 nvprof 命令行工具最为常用。我的配置是Ubuntu18.04,CUDA Toolkit 10.1,驱动 440.26。使用命令行 nvprof ./fileName,报错:Warning: ERR_NVGPUCTRPERM - The user does not have permission to profile ...
2019-11-13 16:48:04
4350
原创 记录一下这次配置VIM和终端的过程
为了防止每换一次电脑,配置VIM和终端时需要的资料就要重新寻找的尴尬局面,把这次配置用到的大体上的资料记录一下配置VIM主要是参考了这个视频:https://www.bilibili.com/video/av55498503,主要是里面介绍的vim-plug:https://github.com/junegunn/vim-plug,安装vim-plug之后,只需要在vimrc中添加插件的网址,保...
2019-10-31 21:26:51
141
原创 LeetCode334 increasingTriplet Python3
题目描述:给定一个未排序的数组,判断这个数组中是否存在长度为 3 的递增子序列。要求:时间复杂度为O(N),空间复杂度为O(1)示例 1:输入: [1,4,3,5,6]输出: true示例 2:输入: [5,4,3,2,1]输出: false这道题目因为严格的时间复杂度和空间复杂度,要使用一种“维护最小有序子序列”方法,记得在别的地方也见过。在这道题中,就是维护一个定长的有序数组,...
2019-09-29 16:41:09
100
原创 LeetCode547 findCircleNum Python3
题目描述:班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知第 i 个和 j 个学生互为朋友关系,否则为不知道。你必须输出所有学生中的已知的朋友圈总数。...
2019-09-19 15:37:38
368
原创 LeetCode200 numIslands and LeetCode79 exist Python3
岛屿数量题目描述:给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。可以假设网格的四个边均被水包围。示例:输入:11000110000010000001输出: 3岛屿数量是一道深度优先搜索的题目,它与回溯法之间就是差了一个不满足就回头的步骤。初始化一个用来记录访问过位置的矩阵。首先遍历...
2019-08-16 21:04:05
148
原创 LeetCode maxCoins Python3
题目描述: 有n个气球,编号为0到n-1,每个气球上都标有一个数字,存在数组nums里。现在要戳破所有气球,每当戳破一个气球i,你就得到nums[left]*nums[i]*nums[right]个硬币。注意当你戳破第i个气球后,气球left和气球right就变成了相邻的气球。求所能获得的最大硬币数量。你可以假设nums[-1] = nums[n] = 1,但这是虚拟的,不能戳破。示例:输入...
2019-08-08 21:47:18
310
原创 LeetCode kthSmallest Python3
题目描述: 给定一个二叉搜索树,编写一个函数来寻找其中第 k 个最小元素。(假设 k 总是有效的)二叉搜索树的好性质就是左子树中的元素总小于根节点,右子树中的元素总大于根节点,因此二叉搜索树的中序遍历返回的就是一个排序了的数组,找到第 k 个元素即可,还可以对遍历计数,从而实现早停,进一步优化时间复杂度。我自己写了一个非递归的,另外附上别人实现的递归写法def kthSmallest(root...
2019-07-31 22:50:10
144
原创 LeetCode minSubArrayLen Python3
题目描述: 给定一个含有 n 个正整数的数组和一个正整数 s ,找出数组中满足其和 ≥ s 的长度最小的连续子数组的长度。如果不存在符合条件的连续子数组,返回 0示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2这道题是一道典型的双指针滑动窗口的题目,记录一下:def minSubArrayLen(s, nums): if not nums: retur...
2019-07-26 22:41:26
361
原创 LeetCode sortList Python3
题目描述:在 O(nlogn) 时间复杂度和常数空间复杂度下对链表进行排序。其实这道题我并没有完成,使用递归方法空间复杂度 O(logn),但是非递归的归并排序实在是麻烦,就先作罢了。我从题解学到了一个用快慢指针一次遍历找到链表中点的方法,比我以前用的两次法显然好的多,这里记录一下。代码如下:# Definition for singly-linked list.# class ListNo...
2019-07-25 22:02:58
140
原创 LeetCode insertionSortList Python3
题目描述:对链表进行插入排序。本来这道题目是真的打算按一般的插入排序一样每次从后往前移动元素的,但是尝试之后发现并做不到,只好还是按照链表的顺序从前往后寻找插入点,然后一次性插入,也不知道这还叫不叫插入排序…… 这里有个感觉好用的技巧,一般链表操作我们总会给表头一个引用,比如 cur = head,然后对 cur 进行操作,以便最后找到表头。这道题这样是不行的,因为表头元素本身也在移动,所以给链...
2019-07-22 23:04:30
119
原创 使用 Python 刷题时可能会用到的技巧
在使用 Python 刷题的过程中发现了许多以前不知道的操作,用这篇博客记录一下,持续更新。字典的具体实现就是一个哈希表,所以只要是 hashable 的对象都可以作为 key,比如 tuple,就是说可以直接使用一个元组作为字典的键,但是列表是不可以的。w = (1,2,3)i = (2,3,4)dic = {w:1, i:2}print(dic[w])out: 1sort...
2019-07-19 22:15:58
223
原创 LeetCode numTrees Python3
题目描述:给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5这道题按我的思路就是暴力递归枚举所有情况,但是官方题解给了一种动态规划的巧妙解法,这里记录一下:给定一个有序递增序列,为了构建二叉搜索树,可以遍历所有数字 i ,然后 i 左侧的序列作为左子树,右侧的序列作为右子树,然后递归的生成二叉树,也就是递归找到所有情况的方法。为了避免重复,采...
2019-07-16 21:49:53
191
原创 LeetCode levelOrder Python3
题目描述: 给定一颗二叉树,返回其按层次遍历的节点值(即逐层地,从左到右访问所有节点)示例:输入:[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]这道题很容易想到使用 BFS 按层遍历二叉树的所有节点,比较困难的点在于输出的形式:需要将同层的节点组合在一起,所以使用一个临时队列 temp_q 记录下一层的节点,当 queue 中的节点全部...
2019-07-15 21:23:29
167
原创 LeetCode groupAnagrams Python3
题目描述:给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]这道题让我知道了,原来在 Python 中 tuple 是 hashable 的,也就是说可以拿...
2019-07-15 20:10:54
110
原创 二叉树的非递归遍历
二叉树递归遍历的代码实现是非常简单的,所以很多时候考察一个人代码能力的时候会让写一个二叉树的非递归遍历。三种实现如下:先序遍历# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = None def preorder(root): res = [] if ...
2019-07-08 10:38:36
119
原创 Python 多进程技术详解
在 Linux/Unix 系统下,可以使用 os.fork() 创建、管理子进程,但是这种方法在 Windows 下是行不通的,而且我并没在实际开发中用过这种方式,所以这里只介绍 Multiprocessing 模块的使用方法。我会直接讲解用法,至于进程、线程的概念这里默认读者是了解的。一、Python3 多进程编程1. Process 类multiprocessing 提供 Process...
2019-07-06 21:54:22
680
原创 LeetCode myPow Python3
题目描述: 实现 pow(x, n) 函数,即实现 x 的 n 次幂函数示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.00000, -2输出: 0.25000这道题直接暴力累乘会超时,比较多用的是快速幂算法,将所求的幂次折半计算,例如:24=22×22,2^4 = 2^2 \times 2^2, 24=22×22, 25=22×22×22^...
2019-07-03 11:15:11
233
原创 LeetCode isSameTree Python3
题目描述: 给定两个二叉树,编写一个函数来检验它们是否相同。如果两棵树结构相同,并且同位置节点具有相同的值,则认为它们相同。来源:力扣(LeetCode)https://leetcode-cn.com/problems/valid-sudoku这道题是道很简单的题,我用的是树的先序遍历,虽然我没试,但是估计中序跟后序应该也可以。但要注意的是要改变一下原本遍历函数的递归出口,改成当指到的子树...
2019-06-27 21:20:45
147
原创 Numpy 中 meshgrid 和 mgrid 的区别
以我的经验,meshgrid 用在数据可视化的时候多一些,mgrid 则在写 CV 方面代码,比如生成 anchor box 的时候用的多些。下面的例子用来说明两者生成矩阵的不同:首先明显的是两个函数生成网格的方向不同,meshgrid 是 x 不变, 将 y 转置,然后一一配对成 (x, y) 的网格点,这样的结果如图所示,x 就是网格点的 x 轴坐标,y 就是网格点的 y 轴坐标。而 ...
2019-06-27 14:04:02
496
原创 LeetCode searchMatrix Python3
题目描述: 编写一个高效算法来判断 MxN 矩阵中,是否存在一个目标值。该矩阵具有以下性质:每行中的整数从左至右按升序排列每行的第一个整数大于前一行的最后一个整数示例 :输入: matrix = [[1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50]], target = 3输出: true使用 Python 使用 in 语句可以...
2019-06-26 22:40:46
137
原创 LeetCode mySqrt Python3
题目描述: 实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。因为返回值是整数,所以结果只保留整数部分,小数部分被直接舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2这道题本身并不难,用二分法可以找到。但是答案里有一种运用数值方法的解法很高效,而且对于类似的数学问题,比如方程求根,优化等问题都可以使用。求解牛顿法的迭代表达式...
2019-06-26 12:53:12
393
原创 LeetCode isValidSudoku Python3
题目描述:判断一个 9x9 的数独是否有效。验证已经填入的数字即可,判断规则如下:数字 1-9 每行只能出现一次数字 1-9 每列只能出现一次数字 1-9 在每一个以粗线划分的 3x3 宫内只能出现一次来源:力扣(LeetCode)https://leetcode-cn.com/problems/valid-sudoku数独部分空格内填入了数字,空白格用 “.” 来表示。示例 :...
2019-06-25 20:11:48
175
原创 LeetCode nextPermutation Python3
题目描述:实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将其重新排列成最小的排序(即按升序排列)。注意:必须原地修改,只能使用额外的常数空间示例 :一 : 1,2,3 -> 1,3,2二 : 3,2,1 -> 1,2,3三 : 1,1,5 -> 1,5,1实话说这题背后的数学原理我还没弄懂,这里先记录...
2019-06-24 16:00:31
113
原创 LeetCode letterCombinations Python3
题目描述:给定一个仅包含数字 2-9 的字符串,返回所有他能表示的字母组合,给出数字到字母的映射如下(与电话按键相同)。2 :‘abc’, 3 :‘def’, 4 :‘ghi’, 5 :‘jkl’, 6 :‘mno’, 7 :‘pqrs’, 8 :‘tuv’, 9 :‘wxyz’示例:输入: “23”输出: [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”...
2019-06-24 10:52:48
280
原创 LeetCode generateParenthesis Python3
题目描述:给出 n 代表生成括号的对数,写出一个函数,使其能够生成所有有效括号组合。示例:输入: n = 3输出: [’((()))’, ‘(()())’, ‘(())()’, ‘()(())’, ‘()()()’]这道题我的思路是递归生成二叉树,并在生成过程中减枝。进入左子树条件:左括号数小于 n进入右子树条件:右括号数小于左括号数def generateParenthesi...
2019-06-23 22:23:47
138
原创 LeetCode divide Python3
题目描述:给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。返回被除数 dividend 除以除数 divisor 得到的商。示例 1:输入: dividend = 10, divisor = 3输出: 3示例 2:输入: dividend = -7, divisor = 3输出: -2注意:除数不为 0, 且环...
2019-06-21 23:07:55
163
原创 LeetCode swapPairs Python3
题目描述:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。示例 1:输入: 1 -> 2 -> 3 -> 4输出: 2 -> 1 -> 4 -> 3这里只给出递归解法的代码,因为限制于本人水平,迭代解法没有图真的很难说清楚……:class Solution: def swa...
2019-06-18 22:24:44
293
原创 LeetCode findMedianSortedArrays Python3
题目描述:给定两个大小为 m 和 n 的有序数组 A 和 B 。找出这两个有序数组的中位数,并且要求算法时间复杂度为 O(log(m+n))。可以假设这两个数组不会同时为空。示例 1:输入: A = [1,3], B = [2]输出: 2.0示例 2:输入: A = [1,2], B = [3,4]输出: (2+3) / 2 = 2.5其实如果没有时间复杂度的要求,这个问题用 P...
2019-06-13 17:58:48
193
原创 LeetCode addTwoNumbers Python3
题目描述:给出两个 非空链表 来表示两个非负整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储一位数字。如果将这两个数加起来,则会返回一个新的 链表 来表示它们的和。可以假设除了数字 0 以外,这两个数不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出: 7 -> 0 -> 8原因...
2019-06-13 12:35:04
124
原创 基本的 BFS 和 DFS,以及基于 BFS 的无权图最短路径算法
BFS 基于队列实现,DFS 基于栈实现,是最基本的图算法,但是它们的扩展有很多实际用处。下面给出这两种图搜索的实现:def bfs(graph, v): queue = [v] visited = set() visited.add(v) res = [] while queue != []: temp = queue.pop(0) res.append(temp) fo...
2019-06-06 13:51:44
1099
原创 配置 Vim 使其有自动移动光标到配对括号、引号中间的功能
一直以来在 Linux 上码码我觉得使用 Vim 、Emacs 这类编辑器比较方便,有一种 all in one 的感觉,直接改 vimrc 就能实现个性化定制。之前的开发我 IDE 用的要多些,最近的话因为 Windows 的 PC 另有用处,所以主要在用 Ubuntu,就把以前没完善的 Vim 再配置一下,让他有自动移动光标到对称括号、引号中间的功能。从网上找来的配置命令加到 vimrc 后...
2019-06-05 15:50:06
1718
原创 最小二叉堆
最小二叉堆优先队列是一种重要的数据结构这点不必多说。作为 Python 使用者,我觉得很自然地会想使用列表及相应的排序算法实现优先队列。但是 insert 方法是 O(n),sort 方法是 O(nlogn),这样的实现貌似不是很高效。实际上实现优先队列的经典方法是使用二叉堆,这种实现使得我们能够在 O(logn) 内排队和出队。这里给出一个二叉堆的基本实现:class BinaryHeap(...
2019-06-03 19:39:43
1268
原创 几种重要排序算法的 Python 实现
冒泡排序最基本的排序,使用交换相邻项的操作每次搜索剩余列表中的最大值,并将其“冒”出。def bubble(alist): first = 0 last = len(alist) - 1 while first < last: for i in range(first, last): if alist[i] > alist[i+1]: alist[i], a...
2019-05-31 10:00:28
182
原创 浅 CNN 中激活函数选择、 kernel大小以及channel数量
Activation function当用经典的 LeNet 进行 MNIST 识别训练时,我发现将 sigmoid 函数改为 ReLu,同时降低学习率(防止 dying neurons)并没能加快 SGD 收敛,反而使得 accuracy 的提升变得非常缓慢。所以这样看来,当 CNN 没有深到极易发生 gradient vanishing 时,sigmoid 或者 tanh 依然是首选。Ke...
2019-04-23 17:17:47
5932
原创 关于 Python Numpy、TensorFlow 等 Module 中一些函数的 axis 标号
以前写代码的时候对 axis 的标号记忆是经验性的,比如网上常说的 “0是对行方向求,1是对列方向求”,但是还是经常记混。今天看到一种说法,感觉应该是正确的、可拓展的:axis 标号对应的是矩阵的维度标号,即 0 是一维度,1 是二维度,以此类推。这样不仅不会再记混,而且遇到更高维度的矩阵也可以正确类推。...
2019-04-22 11:14:10
116
转载 Tensorboard 浏览器打不开链接地址的问题
Tensorboard 的版本是1.11.0,使用 Anaconda Prompt 打开 Tensorboard 生成的链接地址输入到 Chrome 显示是无效的。看到一个博主的办法简单粗暴而有效:直接在 浏览器打开 http://localhost:6006原文链接:https://blog.csdn.net/c20081052/article/details/79054403...
2019-04-20 20:05:16
1473
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人