假设我有一个数组
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
但是这种方法很好地用a:
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)我知道问题是我正在尝试拟合一个预期值的序列,但是我无法弄明白我的方式。
我该如何解决这个问题?
答案 0 :(得分:3)
这应该有效
b = [range(x) for x in a]
<强>更新强>
括号[...]创建一个列表,迭代器内部可用于定义列表中的项目。在这种情况下,a中每个项目的类型范围(x)的项目。
请注意,python2和python3之间的实现存在差异。在python2中,这实际上生成了一个列表列表。然而,在python3中,这会生成一个生成器列表(python2等价物将是xrange),这通常更有效。