小编tja*_*787的帖子

guvectorize 在 nopython 模式下不解析类型

我正在努力解决 numba 错误 Untyped global name 'is_a_subset': Cannot determine Numba type of <class 'numba.np.ufunc.gufunc.GUFunc'> 这通常意味着我摸索并使用了 numba 不支持的方法。以下代码失败。

@guvectorize("(n),(n)->(n)",nopython=True)
def is_a_subset(x,y,out):
    out[:]=np.array([item in x for item in y])

@njit()
def test(x,y,z):
    is_a_subset(x,y,z)
    return z.mean()

x=np.array([[1,2,3],[3,2,1]])
y=np.array([[3,6,1],[1,2,3]])
z = np.empty_like(x)
test(x,y,z)
Run Code Online (Sandbox Code Playgroud)

然而,删除测试功能上的 njit 会使一切正常。

def test(x,y,z):
    is_a_subset(x,y,z)
    return z.mean()
Run Code Online (Sandbox Code Playgroud)

为什么 numba 在非 python 模式下难以解析类型?
我也尝试过没有不同的结果

@guvectorize(["f8[:],f8[:],f8[:]"],"(n),(n)->(n)",nopython=True)
def is_a_subset(x,y,out):
    out[:]=np.array([item in x for item in y])
Run Code Online (Sandbox Code Playgroud)

python jit vectorization numba

9
推荐指数
1
解决办法
418
查看次数

R data.table如何标准化所有行

尝试标准化数据框中的所有行,以便

A B C      A   B   C
1 2 4 =>   1  .3  .6
2 2 5      2  .3  .7
3 4 6      3  .4  .6
Run Code Online (Sandbox Code Playgroud)

会返回一个警告,表明它正在强制转换为整数

outdf <- df[, names(df) := (.SD / rowSums(.SD)), .SDcols=x,by=y]
Run Code Online (Sandbox Code Playgroud)

没有任何作用

outdf <- df[, names(df) := as.numeric(x)][,x:=(.SD / rowSums(.SD)), .SDcols=x,by=y][]
Run Code Online (Sandbox Code Playgroud)

这些都很接近。有没有更好的方法来改变类型或者更好的方法来规范化。(进入这一行的数据约为 42GB,因此 data.table 是正确的选择)

编辑:

x 和 y

x <- names(data)[14:ncol(data)]
y <- names(data)[1]
Run Code Online (Sandbox Code Playgroud)

r normalization data.table

-2
推荐指数
1
解决办法
197
查看次数

标签 统计

data.table ×1

jit ×1

normalization ×1

numba ×1

python ×1

r ×1

vectorization ×1