首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用每个元素x次将python数组映射为x倍长的数组。

使用每个元素x次将python数组映射为x倍长的数组。
EN

Stack Overflow用户
提问于 2018-11-29 11:18:54
回答 4查看 84关注 0票数 5

我希望将一个列表或数组映射到python 3.x中的数组中,输入一个[a,b,c]并获得类似于[a*2, a*2+1, b*2, b*2+1, c*2, c*2+1]的结果:

代码语言:javascript
复制
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] 

一定有更好的方法。list和numpy解决方案都可以。谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-11-29 11:21:22

这样做的一个方法是:

代码语言:javascript
复制
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]

另一种方式是:

代码语言:javascript
复制
b = np.stack([2 * a, 2 * a + 1], axis=1).ravel()

编辑:

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

代码语言:javascript
复制
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]
票数 4
EN

Stack Overflow用户

发布于 2018-11-29 11:28:47

你可以试试;

代码语言:javascript
复制
In [1]: a = [2, 4, 6]

In [2]: f1 = lambda x: x*2

In [3]: f2 = lambda x:x*2+1

In [4]: [f(x) for x in a for f in (f1, f2)]
Out[4]: [4, 5, 8, 9, 12, 13]

或者一个班轮

代码语言:javascript
复制
In [4]: [f(i) for i in a for f in (lambda x: x*2, lambda x: x*2+1)]
Out[4]: [4, 5, 8, 9, 12, 13]
票数 2
EN

Stack Overflow用户

发布于 2018-11-29 15:37:46

它只是python中的一行代码。

解决方案1

代码语言:javascript
复制
[x for i in a for x in (2*i, 2*i + 1)]

解决方案2 (map):

代码语言:javascript
复制
[rv for r in zip(list(map(lambda x: 2 * x, a)), list(map(lambda x: 2 * x + 1, a))) for rv in r]

输入:

代码语言:javascript
复制
>>> a = [2, 4, 6]

输出:

代码语言:javascript
复制
[4, 5, 8, 9, 12, 13]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53537845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档