- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我真的不知道那个错误是关于什么的,因为我什至不直接使用 %r。我怀疑某处有多种类型的混合,但我无法理解会发生在哪里。除了其他加速代码的建议之外,我们将不胜感激。
import numpy as np
from numba import jit, float64
c = 3*10**8
epsilon = 8.854187817 * 10**(-12)
mu = 4*np.pi *10**(-7)
@jit( nopython=True)
def cross(vec1, vec2):
result = np.array([0.,0.,0.])
a1, a2, a3 = vec1[0],vec1[1], vec1[2]
b1, b2, b3 = vec2[0], vec2[1], vec2[2]
result[0] = a2 * b3 - a3 * b2
result[1] = a3 * b1 - a1 * b3
result[2] = a1 * b2 - a2 * b1
return result
@jit( float64[:,:](float64[:],float64,float64,float64[:],float64[:],float64[:]), nopython = True)
def jit_EM_field(position,length,ladung,velocity,acceleration,R):
#using solutions to lienard wiechert potential
radius = np.linalg.norm(R - position)
if radius != 0:
unitradius = (R - position)/radius
else:
unitradius = np.array([0.,0.,0.])
if radius != 0 and np.dot(unitradius, velocity)!=1:
charge = ladung / ( (1 - np.dot(unitradius, velocity)/c)** 3)
if radius < length:
radius = length
radius2 = radius ** 2
velocity_in_c = velocity/c
oneMinusV2 = 1 - np.dot(velocity_in_c, velocity_in_c)
uMinusV = unitradius - velocity_in_c
aCrossUmV = cross(uMinusV, acceleration)
Eleft = (oneMinusV2 * (unitradius - velocity_in_c)) / radius2
Eright = cross(unitradius, aCrossUmV) / (radius*c**2)
E = (charge/(4*np.pi*epsilon)) * (Eleft - Eright)
B = cross(unitradius/c, ((mu*epsilon*charge*c**2) * (Eleft - Eright)))
EM_field = np.array([E,B], dtype = float)
else:
EM_field = np.zeros((2,3), dtype = float)
return EM_field
jit_EM_field( np.array([0.,1.,0.]),1.,0.1,np.array([0.,1.,0.]),np.array([0.,1.,0.])
,np.array([7.2,5.6,0.1]))
runfile('C:/Users/Elios/testingjit.py', wdir='C:/Users/Elios')
Traceback (most recent call last):
File "<ipython-input-26-221208a798d4>", line 1, in <module>
runfile('C:/Users/Elios/testingjit.py', wdir='C:/Users/Elios')
File "C:\Users\Elios\Anaconda4\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile
execfile(filename, namespace)
File "C:\Users\Elios\Anaconda4\lib\site-packages\spyder\utils\site\sitecustomize.py", line 102, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Elios/testingjit.py", line 32, in <module>
@jit( float64[:,:](float64[:],float64,float64,float64[:],float64[:],float64[:]), nopython = True)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\decorators.py", line 176, in wrapper
disp.compile(sig)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\dispatcher.py", line 531, in compile
cres = self._compiler.compile(args, return_type)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\dispatcher.py", line 80, in compile
flags=flags, locals=self.locals)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\compiler.py", line 725, in compile_extra
return pipeline.compile_extra(func)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\compiler.py", line 369, in compile_extra
return self.compile_bytecode(bc, func_attr=self.func_attr)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\compiler.py", line 378, in compile_bytecode
return self._compile_bytecode()
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\compiler.py", line 690, in _compile_bytecode
return self._compile_core()
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\compiler.py", line 677, in _compile_core
res = pm.run(self.status)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\compiler.py", line 257, in run
raise patched_exception
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\compiler.py", line 249, in run
stage()
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\compiler.py", line 476, in stage_nopython_frontend
self.locals)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\compiler.py", line 828, in type_inference_stage
infer.propagate()
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\typeinfer.py", line 717, in propagate
raise errors[0]
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\typeinfer.py", line 127, in propagate
constraint(typeinfer)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\typeinfer.py", line 372, in __call__
self.resolve(typeinfer, typevars, fnty)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\typeinfer.py", line 385, in resolve
sig = typeinfer.resolve_call(fnty, pos_args, kw_args)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\typeinfer.py", line 972, in resolve_call
return self.context.resolve_function_type(fnty, pos_args, kw_args)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\typing\context.py", line 124, in resolve_function_type
return func.get_call_type(self, args, kws)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\types\functions.py", line 49, in get_call_type
sig = temp.apply(args, kws)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\typing\templates.py", line 216, in apply
sig = typer(*args, **kws)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\typing\npydecl.py", line 456, in typer
ndim, seq_dtype = _parse_nested_sequence(self.context, object)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\typing\npydecl.py", line 423, in _parse_nested_sequence
n, dtype = _parse_nested_sequence(context, typ.dtype)
File "C:\Users\Elios\Anaconda4\lib\site-packages\numba\typing\npydecl.py", line 421, in _parse_nested_sequence
raise TypingError("%r not allowed in a homogenous sequence")
TypingError: %r not allowed in a homogenous sequence
最佳答案
Numba 似乎缺乏对嵌套数组的支持。已设法绕过以下代码中的问题。 jit_EM_field() 现在返回一个长度为 6 的数组,而不是 2 个长度为 3 的嵌套数组,您可以将其视为 @jit( float64[:]
在 jit 装饰器中。还删除了一个多余的 else
条款。
import numpy as np
from numba import jit, float64
c = 3*10**8
epsilon = 8.854187817 * 10**(-12)
mu = 4*np.pi *10**(-7)
@jit( nopython=True)
def cross(vec1, vec2):
result = np.array([0.,0.,0.])
a1, a2, a3 = vec1[0],vec1[1], vec1[2]
b1, b2, b3 = vec2[0], vec2[1], vec2[2]
result[0] = a2 * b3 - a3 * b2
result[1] = a3 * b1 - a1 * b3
result[2] = a1 * b2 - a2 * b1
return result
@jit( float64[:](float64[:],float64,float64,float64[:],float64[:],float64[:]), nopython=True)
def jit_EM_field(position,length,ladung,velocity,acceleration,R):
#using solutions to lienard wiechert potential
EM_field = np.array([0.,0.,0.,0.,0.,0.])
radius = np.linalg.norm(R - position)
if radius != 0:
unitradius = (R - position)/radius
if np.dot(unitradius, velocity) != 1:
charge = ladung / ( (1 - np.dot(unitradius, velocity)/c)** 3)
if radius < length:
radius = length
radius2 = radius ** 2
velocity_in_c = velocity/c
oneMinusV2 = 1 - np.dot(velocity_in_c, velocity_in_c)
uMinusV = unitradius - velocity_in_c
aCrossUmV = cross(uMinusV, acceleration)
Eleft = (oneMinusV2 * (unitradius - velocity_in_c)) / radius2
Eright = cross(unitradius, aCrossUmV) / (radius*c**2)
E = (charge/(4*np.pi*epsilon)) * (Eleft - Eright)
B = cross(unitradius/c, ((mu*epsilon*charge*c**2) * (Eleft - Eright)))
EM_field = np.array([E[0],E[1],E[2],B[0],B[1],B[2]])
return EM_field
em_field = jit_EM_field(np.array([0.,1.,0.]),1.,0.1,np.array([0.,1.,0.]),np.array([0.,1.,0.]),np.array([7.2,5.6,0.1]))
em_field_zero = jit_EM_field(np.array([0.,1.,0.]),1.,0.1,np.array([0.,1.,0.]),np.array([0.,1.,0.]),np.array([0.,1.,0.]))
import pprint as pp
pp.pprint(em_field)
pp.pprint(em_field_zero)
关于python - Numba 给出 : ' TypingError: %r not allowed in a homogenous sequence' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47002360/
我想将一个类对象传递给一个函数。我可以让它工作,但我想知道是否有我可以分配的类型?我有一个我正在尝试做的“最小”示例。 spec = [("a", float64),("b",float64)] @j
我有一个简单的函数来对扑克手牌进行排序(手牌是字符串)。 我用 rA,rB = rank(a),rank(b) 调用它,这是我的实现。没有 @jit(nopython=True) 也能很好地工作,但是
我在这里有一个简单的例子来帮助我理解使用 numba 和 cython。我是 numba 和 cython 的新手。我已经尽力结合所有技巧来使 numba 更快,并且在某种程度上,cython 也是如
我正在使用 numbas @jit 装饰器在 python 中添加两个 numpy 数组。如果我使用 @jit 与 python 相比,性能是如此之高。 然而,即使我传入 @numba.jit(nop
我需要为通用指标构建相异矩阵。由于我需要算法快速运行,所以我在 nopython 模式下使用了 numba 0.35。这是我的代码 import numpy as np from numba impo
Numba Cuda 有 syncthreads() 来同步一个 block 中的所有线程。如何在不退出当前内核的情况下同步网格中的所有 block ? 在 C-Cuda 中有一个 cooperati
有人尝试在Google合作伙伴中使用numba吗?我只是不知道如何在此环境中进行设置。 此刻,我陷入了错误library nvvm not found。 最佳答案 将此代码复制到单元格中。这个对我有用
我想编写一个函数,它既可以作为 jitted 函数运行,也可以作为普通 python 或对象模式 numba 运行,具体取决于 numba 是否能够进行类型推断。我实际上更喜欢普通的 python,但
我有一个非常简单的问题我无法解决。 我正在使用 Numba 和 Cuda。我有一个列表 T=[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0] 我想要一个包含列表元素的元组,如
我正在测试一些采用 numpy 数组的函数的 numba 性能,并比较: import numpy as np from numba import jit, vectorize, float64 im
我正在使用 Scipy 的 interpolate.interp1d 在 Python3 中插入一维数组。我想将它与 numba 一起使用,但不支持 scipy 和此功能。是否有 numba 支持
我是 Numba 的新手,我正在尝试使用 Numba(版本 0.54.1)在 Python 中实现旧的 Fortran 代码,但是当我添加 parallel = True 时,程序实际上变慢了.我的程
我需要在 Python 中创建一个位数组。到目前为止,我发现可以使用 bitarray 生成非常节省内存的数组。模块。 然而,我的最终目的是使用来自Numba 的@vectorize 装饰器。 . N
我认为这是一个简单的问题,但我发现 numba 文档缺乏关于如何将字符串类型与 numpy 数组和字典一起使用的信息。我有一个我想使用 numba 的函数,它需要一个邮政编码列表,然后是一个映射邮政编
假设我有两个功能 def my_sub1(a): return a + 2 def my_main(a): a += 1 b = mysub1(a) return b
在以下用于逻辑比较的 numba 编译函数中,性能下降的原因可能是什么: from numba import njit t = (True, 'and_', False) #@njit(boolean
我的代码使用如下列表的笛卡尔积: import itertools cartesian_product = itertools.product(list('ABCDEF'), repeat=n) n可
我正在使用 Numba(版本 0.37.0)来优化 GPU 代码。我想使用组合矢量化函数(使用 Numba 的 @vectorize 装饰器)。 导入和数据: import numpy as np f
我想知道在 numba 函数中计算两个列表的交集的最快方法。只是为了澄清:两个列表的交集示例: Input : lst1 = [15, 9, 10, 56, 23, 78, 5, 4, 9] lst2
我正在使用 Numba 非 python 模式和一些 NumPy 函数。 @njit def invert(W, copy=True): ''' Inverts elementwise
我是一名优秀的程序员,十分优秀!