Python 在组合上增加迭代的最有效的方法是什么?

Python 在组合上增加迭代的最有效的方法是什么?,python,loops,Python,Loops,我有一个numpy数组:NxM 比如说: input_data = np.random.rand(10,5) 我想创建一个新数组,其中新数组是输入_数据列之间的所有可能差异,这将为您提供一个大小为:(10,10)的数组 到目前为止,我的代码是: def get_data_differences(read_data): '''Finds every possible differences between the columns of the read_data read_dat

我有一个numpy数组:NxM

比如说:

input_data = np.random.rand(10,5)
我想创建一个新数组,其中新数组是输入_数据列之间的所有可能差异,这将为您提供一个大小为:(10,10)的数组

到目前为止,我的代码是:

def get_data_differences(read_data):
    '''Finds every possible differences between the columns of the read_data
    read_data: NxM variable where M are the features
    returns diff_data, and NxR variables
    R is the number of every possible combination of 2 columns

    '''
    if len(read_data.shape) != 2:
        print 'The data format is not consistent'
    data_rows, data_columns = read_data.shape
    data_difference = np.zeros((data_rows, 1))
    for combination_pair in itertools.combinations(read_data.T, 2):
    #iterate over every possible pairing of columns (hence the .T)
        minuend_, substraend_ = combination_pair
        difference_ = minuend_ - substraend_
        data_difference = np.append(data_difference, difference_[:, None], axis = 1)
    data_difference = np.delete(data_difference, 0, 1)
    return data_difference
我发现删除我创建的原始零数组效率不高


如果您有更好的建议,那就太好了

为什么不同时为多个列编制索引呢

np.diff(read_data[:, list(combinations(range(read_data.shape[1]), 2))])[..., 0]

您的文档字符串可以是一个长的多行字符串,只要它以
'
开头和结尾。你不必打开和关闭与他们的每一行。一个开始,一个结束。很酷,非常感谢你的提示。。。。我还需要很长时间才能理解Python的所有灵活性,顺便说一句,索引中的3个点做了什么,这是我第一次看到them@Leonpalafox这主要是NumPy索引的功能。尝试将表达式分解以查看其功能,并尝试使用不同的形状对象建立索引。