如何在不丢失结构的情况下(记录)转换 *args 参数

How to (log) transform *args arguments without losing structure

我正在尝试对一些组数可变的数据集应用统计检验。当我尝试对所述组执行对数转换同时保持执行测试功能(在本例中为 scipy 的 kruskal())的能力时,这会导致问题,该功能需要可变数量的参数,每组数据一个。

下面的代码是我想要的想法。自然 stats.kruskal([np.log(i) for i in args]) 不起作用,因为 kruskal() 不期望数组列表,而是每个数组一个参数。如何执行日志转换(或任何类型的更改,真的),同时仍然能够使用该功能?

import scipy.stats as stats
import numpy as np


def t(*args):
    test = stats.kruskal([np.log(i) for i in args])
    return test


a = [11, 12, 4, 42, 12, 1, 21, 12, 6]
b = [1, 12, 4, 3, 14, 8, 8, 6]
c = [2, 2,  3, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 7, 7, 7, 8, 8]

print(t(a, b, c))

IIUC,* 在调用 kruskal 时形成的列表前面应该可以解决问题:

test = stats.kruskal(*[np.log(i) for i in args])

A​​sterisk 解压缩列表并将列表的每个条目作为参数传递给被调用的函数,即 kruskal 这里。