注:对于没有参加过培训,或者没有python、三角、矩阵基础的朋友,如果要完全理解文中代码,需先适当补充相应基础知识!
NumPy(Numerical Python)是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表要高效的多,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,在整个python生态中占有举足轻重的作用,本篇文章旨在讲解如何借助它来提升python的计算性能。
在使用python进行模型点的计算过程中,经常需要遍历所有点,如果点的数量很多,则运行是非常慢的,那么,如何避开使用循环语句,而又能对每个点分别进行操作呢,答案就是:numpy!当然,除了numpy之外,python还有很多其它优秀的库,但鉴于Houdini只内置了numpy库,故本篇文章只讨论numpy的提速方法。
numpy的计算对象通常来说都是数组或矩阵,我们所做的每一个操作都是针对数组里每个元素的,借助此特性,无需再像以前那样非得使用for循环来访问数组中的每个元素了,下面我们还是通过具体实例来说明numpy是如何对数组进行整体性操作的。首先创建一个含有10个元素的数组,然后对每个元素执行sin正弦函数计算,代码如下:
import numpy as np
x = np.arange(0,10)
s = np.sin(x)
print(x)
print(s)
结果:[0 1 2 3 4 5 6 7 8 9]
[ 0. 0.84147098 0.90929743 0.14112001 -0.7568025 -0.95892427 -0.2794155 0.6569866 0.98935825 0.41211849]
上述代码中,np.arange()函数和python默认的range()函数用法类似,这里得到0-9整数,并将这10个整数送入sin()函数计算正弦值,numpy的函数可以对数组的每个元素进行一次性的整体操作,而无需for循环,从而极大的