创建n维向量类的函数

scikit-vectors的Python项目详细描述


Build Status

创建n维向量类的函数

这是一个python库,其中的函数可以创建具有2、3或任意维数的向量类。

调用函数时设置要创建的类的名称及其向量组件的名称。向量的括号和其组件的分隔符也可以作为这些函数的参数。

有11个函数可以创建向量类。它们每个都创建具有特定功能的向量类。其中8个函数使用笛卡尔坐标系创建向量类,4个函数使用公差创建向量类以比较向量。

创建的向量类可以扩展为处理其向量实例和其他组件值的额外功能。

一些向量类适合用作分量值,例如numpy的ndarrays、pandas级数或sympy的代数表达式。

项目主页

https://github.com/t-o-k/scikit-vectors

项目wiki

https://github.com/t-o-k/scikit-vectors/wiki

wiki有指向文档的链接,这些文档显示如何使用创建的向量类。

安装

scikit vectors需要python 3.5或更高版本。

pip install scikit-vectors

示例

除了下面的简短示例外,这里还有一些更详细的示例:

https://github.com/t-o-k/scikit-vectors_examples

简单示例

>>>frommathimportpi>>>fromskvectorsimportcreate_class_Cartesian_3D_Vector>>>CV3D=create_class_Cartesian_3D_Vector('CV3D','xyz',brackets=['<< ',' >>'])>>>u=CV3D(3,0,-4)>>>print(u)<<3,0,-4>>>>>v=CV3D(1,-2,3)*2>>>repr(v)'CV3D(x=2, y=-4, z=6)'>>>u.normalize()CV3D(x=0.6,y=0.0,z=-0.8)>>>u.dot(v)-18>>>u.cross(v)CV3D(x=-16,y=-26,z=-12)>>>u=CV3D(4.5,-3.0,-1.5)>>>v=CV3D(-3,-3,-3)>>>u.angle(v)/pi0.49999999999999994>>>u=CV3D(5,-4,-3)>>>v=CV3D(-2,0,2)>>>u.project(v)CV3D(x=4.0,y=-0.0,z=-4.0)>>>u=CV3D(-5,0,0)>>>v=CV3D(0,12,0)>>>(u-v).length()13.0>>>u=CV3D(-3,4,-5)>>>u.rotate_x(pi)CV3D(x=-3,y=-3.9999999999999996,z=5.000000000000001)>>>u=CV3D(-3,4,-5)>>>v=CV3D(0,-10,-8)>>>u.axis_rotate(v,-pi)CV3D(x=2.999999999999999,y=-4.0,z=5.0)>>>u=CV3D(-3,4,-5)>>>v=CV3D(-6,0,0)>>>w=CV3D(0,0,7)>>>u.reorient(v,w)CV3D(x=-5.0,y=4.0,z=3.0)>>>u=CV3D(0,-1,2)>>>v=CV3D(-3,4,-5)>>>w=CV3D(3,1,2)>>>u.stp(v,w)-21>>>
>>>fromskvectorsimportcreate_class_Simple_Vector>>>SV=create_class_Simple_Vector('SV',['first','second','third','fourth','fifth','sixth'])>>>u=SV(3,1,-2,-3,4,2)>>>uSV(first=3,second=1,third=-2,fourth=-3,fifth=4,sixth=2)>>>v=SV(2,-2,1,3,1,4)>>>u*v+10SV(first=16,second=8,third=8,fourth=1,fifth=14,sixth=18)>>>2*(u-v)SV(first=2,second=6,third=-6,fourth=-12,fifth=6,sixth=-4)>>>u**v/2SV(first=4.5,second=0.5,third=-1.0,fourth=-13.5,fifth=2.0,sixth=8.0)>>>u*=2/v>>>uSV(first=3.0,second=-1.0,third=-4.0,fourth=-2.0,fifth=8.0,sixth=1.0)>>>u.first3.0>>>(u+v).sixth5.0>>>u.fifth+=20>>>uSV(first=3.0,second=-1.0,third=-4.0,fourth=-2.0,fifth=28.0,sixth=1.0)>>>u.c_add_third(24)SV(first=3.0,second=-1.0,third=20.0,fourth=-2.0,fifth=28.0,sixth=1.0)>>>u.c_imul_bar_second(1000)>>>uSV(first=3000.0,second=-1.0,third=-4000.0,fourth=-2000.0,fifth=28000.0,sixth=1000.0)>>>v=SV(0,1,2,3,4,5)/6>>>round(v,3)SV(first=0.0,second=0.167,third=0.333,fourth=0.5,fifth=0.667,sixth=0.833)>>>

对于numpy

>>>fromskvectorsimportcreate_class_Cartesian_3D_Vector>>>importnumpyasnp>>>NP3= \
...create_class_Cartesian_3D_Vector(...name='NP3',...component_names=[chr(0x03b1)*2,chr(0x03b2)*2,chr(0x03b3)*2],...brackets=[chr(0x2770)*2+' ',' '+chr(0x2771)*2],...sep=', ',...cnull=np.array([0.,0.,0.,0.]),...cunit=np.array([1.,1.,1.,1.]),...functions= \
...{...'eq':np.equal,...'ne':np.not_equal,...'not':np.logical_not,...'and':np.logical_and,...'or':np.logical_or,...'all':np.all,...'any':np.any,...'min':np.minimum,...'max':np.maximum,...'abs':np.absolute,...'int':np.rint,...'ceil':np.ceil,...'copysign':np.copysign,...'log10':np.log10,...'cos':np.cos,...'sin':np.sin,...'atan2':np.arctan2,...'pi':np.pi...}...)>>>NP3.component_names()['αα','ββ','γγ']>>>u= \
...NP3(...np.random.randint(-10,10,size=4),...np.random.randint(-10,10,size=4),...np.random.randint(-10,10,size=4)...)>>>uNP3(αα=array([7.,-8.,5.,7.]),ββ=array([-1.,-4.,7.,-4.]),γγ=array([1.,6.,-2.,8.]))>>>u/=10>>>uNP3(αα=array([0.7,-0.8,0.5,0.7]),ββ=array([-0.1,-0.4,0.7,-0.4]),γγ=array([0.1,0.6,-0.2,0.8]))>>>v= \
...NP3(...np.array([-3,5,-1,2]),...np.array([0,12,0,-1]),...np.array([4,0,0,2])...)>>>str(v)'❰❰ [-3.  5. -1.  2.], [  0.  12.   0.  -1.], [ 4.  0.  0.  2.] ❱❱'>>>v.length()array([5.,13.,1.,3.])>>>v.contains(np.array([4.0,2.0,-1.0,3.0]))array([True,False,True,False],dtype=bool)>>>(u-v)*10NP3(αα=array([37.,-58.,15.,-13.]),ββ=array([-1.,-124.,7.,6.]),γγ=array([-39.,6.,-2.,-12.]))>>>w=NP3(1,-1,0)>>>wNP3(αα=array([1.,1.,1.,1.]),ββ=array([-1.,-1.,-1.,-1.]),γγ=array([0.,0.,0.,0.]))>>>u.reorient(v,w)NP3(αα=array([0.1771821,-0.0652714,-0.84852814,0.76479998]),ββ=array([0.65801471,0.8920424,-0.14142136,-0.83797539]),γγ=array([-0.21359575,0.6,-0.2,0.05364919]))>>>u.axis_rotate(NP3(1,-2,1),np.pi/4)NP3(αα=array([0.51492277,-0.76733621,0.21325376,0.26084032]),ββ=array([0.00486333,-0.74556654,0.80444152,-0.53626169]),γγ=array([0.49480389,-0.12379688,0.29562928,0.96663629]))>>>

运行测试

git clone https://github.com/t-o-k/scikit-vectors
cd scikit-vectors
python3 -m unittest discover

以下是更多信息: https://travis-ci.org/t-o-k/scikit-vectors

许可证信息

有关使用条款和条件的信息,请参阅文件许可证,以及所有保证的免责声明。

作者

托罗拉夫克里斯滕森

http://subcube.com

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
命令行界面当前活跃社区中的哪个Java CLI库功能更丰富?   java如何使我的代码线程安全?   java创建有限哈希集   java JVM中可以有多少类文本实例?   乘坐请求uber java api的客户端类型?   构建后将jar添加到springboot jar类路径的java策略   未找到java Android文件txt文件异常   java如何修复“Mediaplayer mp=新Mediaplayer”。create(this,R.raw.filename.mpr)“”为create,红色为错误   java使用charAt()函数赋值给char数组时抛出错误   用Java定义公共库接口的库   无法解析方法“show(安卓.support.v4.app.FragmentTransaction,java.lang.String)”   java在程序运行时在文件中写入完整内容,但每次代码运行时都创建新文件   使用AllegroGraph RDF存储的java ObjecttoTriple映射?   Java从嵌套类返回   在java中使用Google Drive API无法获取超过100个文件   数组用java编写一个程序来打印从50到250(包括50和250)的所有数字的总和,这些数字是3的倍数,不能被9整除   java使用卷打印到屏幕的成本差异   java无法理解错误是什么