分享

Python科学计算之ufunc操作上

 云深无际 2021-11-03

http://www.bizhi88.com/bizhi/102085.html

ufunc是universal function的缩写,它是一种能对数组的每个元素进行操作的函数。NumPy内置的许 多ufunc函数都是在C语言级别实现的,因此它们的计算速度非常快。让我们来看一个例子:

sin函数对x内的每一个元素进行计算


先用linspace产生一个从0到2*PI的等距离的10个数,然后将其传递给sin函数,由于np.sin是一个ufunc函数,因此它对x中的每个元素求正弦值,然后将结果返回,并且赋值给y。计算之后x中的值并 没有改变,而是新创建了一个数组保存结果。如果我们希望将sin函数所计算的结果直接覆盖到数组x上 去的话,可以将要被覆盖的数组作为第二个参数传递给ufunc函数。例如:


sin函数的第二个参数也是x,那么它所做的事情就是对x中的每给值求正弦值,并且把结果保存到x中的对应的位置中。此时函数的返回值仍然是整个计算的结果,只不过它就是x,因此两个变量的id是相同的(变量t和变量x指向同一块内存区域)。

就像这样的一种使用法

import timeimport mathimport numpy as npx = [i*0.001 for i in range(1000000)]start = time.clock()
for i, t in enumerate(x): x[i] = math.sin(t)print("math.sin:", time.clock()-start)

x = [i*0.001 for i in range(1000000)]x = np.array(x)start = time.clock()np.sin(x, x)print("numpy.sin:", time.clock()-start)

这里的代码就卡住了,我时间模块写错了


今天很晚了,程序也报错了.去修了~

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多