python - 带有权重的 numpy 数组部分和

标签 python arrays numpy split slice

我有一个 numpy 数组,比方说,[a,b,c,d,e,...],我想计算一个看起来像 [x *a+y*b, x*b+y*c, x*c+y*d,...]。我的想法是首先将原始数组拆分成类似 [[a,b],[b,c],[c,d],[d,e],...] 然后用指定轴和权重的 np.average 攻击这个生物(在我的例子中是 x+y=1),或者甚至使用 np.dot。不幸的是,我不知道如何创建这样的 [a,b],[b,c],... 对数组。非常感谢任何帮助,甚至是完成主要任务的完全不同的想法:-)

最佳答案

最快、最简单的方法是手动提取数组的两个切片并将它们加在一起:

>>> arr = np.arange(5)
>>> x, y = 10, 1
>>> x*arr[:-1] + y*arr[1:]
array([ 1, 12, 23, 34])

如果您想将其概括为三元组、四元组,这将变得很痛苦……但是您可以使用 as_strided 以更通用的形式从原始数组创建对数组:

>>> from numpy.lib.stride_tricks import as_strided

>>> arr_pairs = as_strided(arr, shape=(len(arr)-2+1,2), strides=arr.strides*2)
>>> arr_pairs
array([[0, 1],
       [1, 2],
       [2, 3],
       [3, 4]])

当然,使用 as_strided 的好处在于,就像数组切片一样,不涉及数据复制,只是扰乱了内存的查看方式,所以创建这个数组实际上是无成本。

现在可能最快的方法是使用 np.dot:

>>> xy = [x, y]
>>> np.dot(arr_pairs, xy)
array([ 1, 12, 23, 34])

关于python - 带有权重的 numpy 数组部分和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20162578/

相关文章:

java - 使用单一条件选择数据的有效方法

python - 生成 n 个箱子中 k 个球的所有可能结果(多项式/分类结果的总和)

python - 分割大型列表的最有效方法是什么?

python - 解密单字节 XOR 编码文件

python - 从单个数据创建 N 维正态分布(在 python 中)

arrays - 如果不存在,MongoDB 将值添加到数组

python - 将存储为 numpy 数组的图像转换为 hsv 的有效方法

python - peewee:当我 create() 时,无效字段去哪里?

python:如何删除某些字符

javascript - 循环将数组中的元素移到末尾