使用每个元素x次将python数组映射到ax次更长的数组

Ech*_*han 5 python numpy list

我想将列表或数组映射到数组中python 3.x,输入a [a,b,c]和get结果,[a*2, a*2+1, b*2, b*2+1, c*2, c*2+1] 例如:

a = np.array([2,4,6])
result = []
for a1,a2 in zip(a*2, a*2+1):
    result = result + [a1,a2]
print(result)
# Output: [4, 5, 8, 9, 12, 13] 
Run Code Online (Sandbox Code Playgroud)

必须有更好的方法.列表和numpy解决方案都可以.谢谢

jde*_*esa 4

一种方法是:

import numpy as np

a = np.array([2, 4, 6])
b = np.repeat(2 * a, 2)
b[1::2] += 1
print(b)
# [ 4  5  8  9 12 13]
Run Code Online (Sandbox Code Playgroud)

其他方式:

b = np.stack([2 * a, 2 * a + 1], axis=1).ravel()
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您想要一个允许您按任意因子(而不仅仅是 2)放大数组的解决方案,您可以使用如下函数:

import numpy as np

def make_longer(a, n):
    b = np.tile(n * a[:, np.newaxis], (1, n))
    b += np.arange(n, dtype=b.dtype)
    return b.ravel()

a = np.array([2, 4, 6])
print(make_longer(a, 2))
# [ 4  5  8  9 12 13]
print(make_longer(a, 3))
# [ 6  7  8 12 13 14 18 19 20]
Run Code Online (Sandbox Code Playgroud)