合并从循环返回的numpy数组

ust*_*etz 3 python arrays numpy

我有一个生成numpy数组的循环:

for x in range(0, 1000):
   myArray = myFunction(x)
Run Code Online (Sandbox Code Playgroud)

返回的数组总是一维的.我想将所有数组合并为一个数组(也是一维数组).

我试过以下,但失败了

allArrays = []
for x in range(0, 1000):
   myArray = myFunction(x)
   allArrays += myArray
Run Code Online (Sandbox Code Playgroud)

错误是ValueError: operands could not be broadcast together with shapes (0) (9095).我怎么能让它工作?

例如这两个数组:

[ 234 342 234 5454 34 6]
[ 23 2 1 4 55 34]
Run Code Online (Sandbox Code Playgroud)

应该合并到这个数组:

[ 234 342 234 5454 34 6 23 2 1 4 55 34 ]
Run Code Online (Sandbox Code Playgroud)

jme*_*etz 9

你可能意味着

allArrays = np.array([])
for x in range(0, 1000):
    myArray = myFunction(x)
    allArrays = np.concatenate([allArrays, myArray])
Run Code Online (Sandbox Code Playgroud)

更简洁的方法(参见wims的答案)是使用列表理解,

allArrays = np.concatenate([myFunction(x) for x in range]) 
Run Code Online (Sandbox Code Playgroud)

  • 它不起作用,它说“所有输入数组必须具有相同的维度数,但索引 0 处的数组有 1 个维度,索引 1 处的数组有 3 个维度” (2认同)

Ник*_*кес 8

您应该知道返回数组的形状。假设, myArray.shape = (2, 4) 然后

allArrays = np.empty((0, 4))
for x in range(0, 1000):
    myArray = myFunction(x)
    allArrays = np.append(allArrays, myArray, axis = 0)
Run Code Online (Sandbox Code Playgroud)

  • 不,因为我们创建了 0 行 4 列的数组:`array([], shape=(0, 4), dtype=float64)` (3认同)

wim*_*wim 6

allArrays = np.concatenate([myFunction(x) for x in range(1000)])
Run Code Online (Sandbox Code Playgroud)