zac*_*618 17 python macos numpy
我正在Mac上运行python 2.7,我正在与其他人使用Ubuntu进行组编码项目.由于投射规则错误,他们编写的代码每隔一段时间就无法在我的计算机上运行:
273 # Apply column averages to image
--> 274 img[:middle] *= (bg[0]/np.tile(topCol, (middle,1)))
275 img[middle:] *= bg[1]/np.tile(botCol, (middle,1))
276
TypeError: Cannot cast ufunc multiply output from dtype('float64') to dtype('int16') with casting rule 'same_kind'
Run Code Online (Sandbox Code Playgroud)
我不认为你需要具体细节,因为这发生在几个不同数字类型的不同地方.
它适用于他们所有的电脑没问题.我写的所有东西都适合他们,但他们经常写的东西对我来说都不起作用.
有没有理由说我们的机器不同意,有没有办法可以改变我的方式?
谢谢!
nne*_*neo 16
这个帖子表明你numpy比同事使用的版本更新(请检查使用numpy.version.version).在1.7.0开发分支中,似乎他们已经将隐式强制转换规则更改为更严格的same_kind规则,该规则禁止(除其他事项)浮点数和整数格式之间的强制转换.
要解决这个问题,我建议使用这样的代码:
img[:middle] *= (bg[0]/np.tile(topCol, (middle,1))).astype(img.dtype)
Run Code Online (Sandbox Code Playgroud)
nneonneo有一个正确的解决方案,我想我会添加一些其他的工作.
一个问题是img变量先前被手动定义为int.然后用float违反的严格类型转换乘法
img = np.int16( cp.deepcopy(imgArray) )
...
img[:middle] *= bg[0]/np.tile(topCol, (middle,1))
>>TypeError: Cannot cast ufunc multiply output from dtype('float64') to dtype('int16') with casting rule 'same_kind'
Run Code Online (Sandbox Code Playgroud)
一个解决方法:
我可以更改初始变量类型定义以匹配以后需要的内容:
img = np.float64( cp.deepcopy(imgArray) )
...
img[:middle] *= bg[0]/np.tile(topCol, (middle,1))
Run Code Online (Sandbox Code Playgroud)
或者我可以保留原始类型转换,并更改运算符:
img = np.int16( cp.deepcopy(imgArray) )
...
img[:middle] = img[:middle]*bg[0]/np.tile(topCol, (middle,1))
Run Code Online (Sandbox Code Playgroud)
出于某种原因,Numpy允许以这种方式进行操作,而不是这样 *=
感谢您的帮助!
| 归档时间: |
|
| 查看次数: |
6411 次 |
| 最近记录: |