2

假设我有一个数组

a = np.array[5, 3, 2]

并基于该数组,我想以以下形式返回一个新数组:

b = np.array[ [0, 1, 2, 3, 4], [0, 1, 2], [0, 1] ]

我一直在尝试:

for item in a:
    b = np.hstack(np.arange(item))
    print b

但这只会给我元素而不将它们加入数组中;

for item in a:
    b = b.append((b[:], b[item]))
    print b

但是这种方法很好地解决了:

AttributeError: 'numpy.ndarray' object has no attribute 'append'

我尝试过其他的东西,比如:

b[item] = np.arange(item), 

但是那个抱怨越界索引。

b = np.zeros(len(a))
for item in np.arange(len(a)):
b[item] = np.arange(b[item])
print b

抱怨

ValueError: setting an array element with a sequence.

最后一个看起来更有希望,在这个网站上搜索一些问题(https://stackoverflow.com/a/13311979/531687)我知道问题是我正在尝试拟合一个序列价值是预期的,但我不知道如何解决它。

我该怎么办?

4

1 回答 1

3

这应该工作

b = [range(x) for x in a]

更新

这里的括号 [...] 创建了一个列表,并且在迭代器内可用于定义列表中的项目。在这种情况下,a 中每个项目的范围(x)类型的项目。

注意这里的python2和python3在实现上是有区别的。在 python2 中,这实际上会生成一个列表列表。然而,在 python3 中,这会生成一个生成器列表(python2 的等价物是 xrange),这通常更有效。

于 2013-10-27T21:55:01.607 回答