【发布时间】:2018-01-14 16:43:33
【问题描述】:
我正在探索 python 中的 scipy.linalg.get_blas_function() 方法。但我注意到它在处理 numpy int 类型时遇到了一些困难。
输入
import scipy.linalg
import numpy as np
def blas(name, ndarray):
arr = scipy.linalg.get_blas_funcs((name,), (ndarray,), dtype=ndarray.dtype)[0]
return arr
blas_scal = blas('scal', np.array([], dtype=np.int32))
print "int32 --> %s" % (blas_scal.dtype)
blas_scal = blas('scal', np.array([], dtype=np.int64))
print "int64 --> %s" % (blas_scal.dtype)
blas_scal = blas('scal', np.array([], dtype=np.float32))
print "float32 --> %s" % (blas_scal.dtype)
blas_scal = blas('scal', np.array([], dtype=np.float64))
print "float64 --> %s" % (blas_scal.dtype)
输出
int32 --> float64
int64 --> float64
float32 --> float32
float64 --> float64
如您所见,当 get_blas_funcs() 为整数时,它似乎会忽略数据类型,并在您有任何类型的 numpy 整数时输出 float64。但是,使用 get_blas_funcs() 输入 numpy float32 或 numpy64 就可以了,并且在输出时不会更改 dtype。
这里发生了什么? 这个函数如何处理数据类型?
【问题讨论】:
标签: python scipy linear-algebra