lapjv - 非法指令(核心已转储)
lapjv - Illegal instruction (core dumped)
我了解到 Illegal instruction (core dumped) 错误可能是由于某些机器问题或版本问题。
但是,我的情况很奇怪,因为我有两个脚本 - 一个用于测试函数的虚拟脚本,另一个是我的实际脚本。奇怪的是,它适用于我的虚拟脚本(最低成本和正确计算的所有内容,无错误执行的脚本等)。但是当我试图在我的实际脚本中执行该函数时,它会抛出一个非法指令(核心转储)错误。
我已经检查过,在这两种情况下,我都输入了 class 'numpy.ndarray' 的方阵,并且两者的元素都是 class 'numpy.float64'。
唯一的区别是虚拟矩阵是一个 4x4 方阵,而实际方阵的大小为 200 x 200。我尝试将大小减小到大约 50 x 50 只是为了测试看看是否是问题所在,但它仍然抛出相同的问题错误。
非常感谢任何建议,谢谢!
import numpy as np
from lapjv import lapjv
a=np.array([[5.34,3.04,2.04,8.02],
[7.0,9.34,2.5,6.43],
[6.,4.43,5.2,7.45],
[5.34,7.42,7.43,8.44]])
print(type(a))
print(type(a[0]))
print(type(a[0][0]))
row_ind, col_ind, _ =lapjv(a)
print(row_ind)
print(col_ind)
这个returns:
class 'numpy.ndarray'
class 'numpy.ndarray'
class 'numpy.float64'
[2 3 1 0]
[3 2 0 1]
在命令行上。 (这里一切正常)。
但对于我的实际代码:
from lapjv import lapjv
import numpy as np
<some code here>
if(len(qDes)<len(dbDes)):
#pad rows
padRows=np.zeros((diff,len(dbDes)),np.int64)
print(len(padRows))
print(len(padRows[0]))
newCostMat=np.r_[costMatNP,padRows]
elif(len(qDes)>len(dbDes)):
#padCols
padCols=np.zeros((len(qDes),diff),np.int64)
newCostMat=np.c_[costMatNP,padCols]
else:
#no padding
newCostMat=costMatNP
print(len(newCostMat[0]))
print(len(newCostMat))
print(type(newCostMat))
print(type(newCostMat[0]))
print(type(newCostMat[0][0]))
#jonker-volgenant algorithm
row_ind,col_ind, _=lapjv(newCostMat)
returns:
3
201
201
201
class 'numpy.ndarray'
class 'numpy.ndarray'
class 'numpy.float64'
Illegal instruction (core dumped)
我通过重新安装新环境修复了它。现在我使用 Anaconda 代替 Python 3.6.3
将您重定向至此 link https://forums.developer.nvidia.com/t/illegal-instruction-core-dumped/165488。安装 numpy==1.19.4
解决了我的问题。
我了解到 Illegal instruction (core dumped) 错误可能是由于某些机器问题或版本问题。
但是,我的情况很奇怪,因为我有两个脚本 - 一个用于测试函数的虚拟脚本,另一个是我的实际脚本。奇怪的是,它适用于我的虚拟脚本(最低成本和正确计算的所有内容,无错误执行的脚本等)。但是当我试图在我的实际脚本中执行该函数时,它会抛出一个非法指令(核心转储)错误。
我已经检查过,在这两种情况下,我都输入了 class 'numpy.ndarray' 的方阵,并且两者的元素都是 class 'numpy.float64'。 唯一的区别是虚拟矩阵是一个 4x4 方阵,而实际方阵的大小为 200 x 200。我尝试将大小减小到大约 50 x 50 只是为了测试看看是否是问题所在,但它仍然抛出相同的问题错误。
非常感谢任何建议,谢谢!
import numpy as np
from lapjv import lapjv
a=np.array([[5.34,3.04,2.04,8.02],
[7.0,9.34,2.5,6.43],
[6.,4.43,5.2,7.45],
[5.34,7.42,7.43,8.44]])
print(type(a))
print(type(a[0]))
print(type(a[0][0]))
row_ind, col_ind, _ =lapjv(a)
print(row_ind)
print(col_ind)
这个returns:
class 'numpy.ndarray'
class 'numpy.ndarray'
class 'numpy.float64'
[2 3 1 0]
[3 2 0 1]
在命令行上。 (这里一切正常)。
但对于我的实际代码:
from lapjv import lapjv
import numpy as np
<some code here>
if(len(qDes)<len(dbDes)):
#pad rows
padRows=np.zeros((diff,len(dbDes)),np.int64)
print(len(padRows))
print(len(padRows[0]))
newCostMat=np.r_[costMatNP,padRows]
elif(len(qDes)>len(dbDes)):
#padCols
padCols=np.zeros((len(qDes),diff),np.int64)
newCostMat=np.c_[costMatNP,padCols]
else:
#no padding
newCostMat=costMatNP
print(len(newCostMat[0]))
print(len(newCostMat))
print(type(newCostMat))
print(type(newCostMat[0]))
print(type(newCostMat[0][0]))
#jonker-volgenant algorithm
row_ind,col_ind, _=lapjv(newCostMat)
returns:
3
201
201
201
class 'numpy.ndarray'
class 'numpy.ndarray'
class 'numpy.float64'
Illegal instruction (core dumped)
我通过重新安装新环境修复了它。现在我使用 Anaconda 代替 Python 3.6.3
将您重定向至此 link https://forums.developer.nvidia.com/t/illegal-instruction-core-dumped/165488。安装 numpy==1.19.4
解决了我的问题。