numpy
S_o_l_o_n
logic
展开
-
numba使用注意点小结
4. 对于array的索引,支持全部的基础索引操作和切片索引操作,但是对于高级索引,尽管array可能是多维的,但是高级索引只能有一个,即只能在一个维度上有高级索引,而且这个高级索引也必须是一维的array,这里强调一维以及是array,不能是list,不然numba无法识别;也不能是多于一维的,如果确实需要一维以上的高级索引,则可以使用loop实现,numba会内部将loop转为高效的代码。1. numba不支持python的字典类型。2. 尽量使用数值型的array。原创 2023-02-09 21:48:02 · 910 阅读 · 0 评论 -
记numpy高速封装库bottleneck的一个bug
因此,在使用bottleneck时,避免直接使用move_mean函数,而且切记要对结果进行检查,bottleneck这个库目前看来还不是很安全。奈何numpy本身对移动窗口函数的支持不好,numpy.lib.stride_tricks.sliding_window_view用起来不是那么方便,有时候效率也不高。博主在使用bottleneck的移动平均函数时,对0的平均得到了很接近0的非零值,这是一个官方已知的bug,但是还未修复。原创 2023-01-09 23:12:51 · 467 阅读 · 0 评论 -
numpy中的浅拷贝(视图)和深拷贝
浅拷贝会在内存中产生一个不同的对象,但是由于拷贝的是父对象,子对象并没有拷贝,所以浅拷贝会存在共享内存的情况。实际上,numpy中的视图就是一种浅拷贝。 numpy中,一个ndarray的视图和原ndarray是不同的对象,但是其共享ndarray值的内存,所以当修改其中一个对象的值的时候,两个对象都会发生改变。这样两个对象是互相关联的,这样做的好处就是不会涉及到数据在内存中的复制,这样可以节省空间,提高性能;而不好的地方就是两个对象是并不是相互独立的,有时候我们并不预期改变一...原创 2020-09-26 23:19:35 · 369 阅读 · 0 评论 -
numpy多维数组获取指定矩形区域
ndarray中,当我们想获取其指定行列的子矩形局域时,该如何获取?一般的,我们容易误认为通过传入相应索引的数组来直接获取,但是结果出乎我们预期,这时我们得到的却是相应数组构成的坐标对应于ndarray中的元素构成的一维数组。如下所示。上面例子中,我们想获取arr对象中的右下角四个元素构成的矩形子区域,所以我们尝试通过arr[[1,2],[1,2]]的方式获取,结果返回的是(1,1),(2,2)坐标对应的元素,并不是我们想要的矩形区域。实际上,对于numpy的ndarray,当我们对行...原创 2020-09-15 22:07:25 · 2224 阅读 · 0 评论 -
numpy数据类型转换Memory Error解决办法之给元素构建数字映射
当我们用numpy处理数据时,由于numpy的内存管理机制,其要求所有的元素的内存size一致,这样很多时候就会存在一个问题:一旦数据中出现了一个占据字节数很大的元素,那么所有的元素都会同样的占据该内存大小,尽管其他的元素并不需要这么大的内存就可以储存;这个问题就容易造成内存的消耗过大,内存浪费,如果机器内存本身不大,数据量又很大,那么就会导致memory error。 ...原创 2019-11-15 16:34:48 · 510 阅读 · 0 评论 -
numpy:性能提升之利用numpy的apply_along_axis函数替代pandas的apply函数
pandas的DataFrame的apply函数可以实现对指定的轴进行遍历操作,这是个很方便也很常用的函数,但是问题在于,当我们的数据量较大,比如有50万行,这时要对50万行进行逐行遍历的话,如果对每行的操作用到了Series索引,那么这将是一个非常耗时的过程,因为对于pandas来说,索引操作是低效的,这种低效再经过50万行放大,那么性能就会显得很差。对此,我们可以通过numpy的...原创 2019-11-15 15:50:28 · 10091 阅读 · 1 评论 -
numpy数据类型说明以及自动转换陷阱
numpy的dtype是一个很重要的概念,因为numpy为了性能,优化了内存管理,ndarray的值在内存中几乎是连续的,同时其每个元素的内存大小也被设计成是一样的,因此,当生成ndarray时,每个元素的数据类型都会被转为相同的类型,这时如果原生的数据类型是不一样的,那么就涉及到一个数据类型转换的问题,即data type casting。 明白numpy中的数据类...原创 2019-11-15 10:43:02 · 1709 阅读 · 0 评论 -
numpy:利用np.frompyfunc函数实现元素级操作,类似pandas的applymap函数功能
在pandas里,对于DataFrame,可以利用applymap(func)函数实现对DataFrame中每个元素进行函数func操作,而且相比于for loop,其性能会有较大的提升。而对于numpy中的ndarrray,没有类似名称的函数实现相同功能,但是有一个numpy.frompyfunc函数,其可以对一个python函数进行封装,返回一个封装后的函数,然后可以利用返回的封...原创 2019-11-13 21:34:42 · 4793 阅读 · 0 评论 -
pandas中对nan空值的判断和陷阱
pandas基于numpy,所以其中的空值nan和numpy.nan是等价的。numpy中的nan并不是空对象,其实际上是numpy.float64对象,所以我们不能误认为其是空对象,从而用bool(np.nan)去判断是否为空值,这是不对的。 对于pandas中的空值,我们该如何判断,并且有哪些我们容易掉进去的陷阱,即不能用怎么样的方式去判断呢?可以判断pand......原创 2019-09-09 15:32:18 · 67594 阅读 · 10 评论 -
关于python中numpy的“广播”机制原理的阐述
“广播”指的是在不同维度的数组之间进行算术运算的一种执行机制,其通过将数据矢量化进行高效的运算,而不是按照传统的对标量数据进行循环运算达到目的,因此,“广播”是numpy一种中非常强大的功能,可以实现高效快速的矢量化数据的运算。下面,我们看看这个机制的原理是怎么样的,从而可以帮助我们更好的利用“广播”这个强大的功能。 首先,我们对“广播”进行一个大概的理解。顾名思义,“...原创 2018-06-29 19:12:33 · 4049 阅读 · 0 评论 -
numpy中ndarray对象和pandas中DataFrame对象的索引方法及对比
pandas库是基于numpy构建的,所以其中的数据类型具有许多的相似之处,这里我们研究ndarray和DataFrame这两种数据结构在索引方面的方法,并做一些基本的对比,以此让我们更好的记忆和理解相应的索引方法。先抛出结论:对于DataFrame对象,其只有直接的df[][]索引和ndarray不一样,此时DataFrame先索引的是列,而不是行,也没有df[i,j]的索引方法,...原创 2018-07-01 18:39:00 · 1887 阅读 · 0 评论