Python中的Numpy数组'for'循环

时间:2018-04-14 01:15:24

标签: python numpy

我正在使用for循环从2个数组中提取值,然后将它们放在一个新数组中。我可以得到数组的最后一行,但不是它之前的所有行。 (我想将每一行追加到同一个数组。)有什么想法吗?

import numpy as np
# Array inputs
a = np.array([0, 1, 2])
b = np.array([[1, 10, 20, 30], [2, 40, 50, 60], [3, 70, 80, 90]])

请注意,a数组将是随机的,具体取决于加载的文件。因此,对于一个文件,它可能是:

([1, 1, 2])

然后对于另一个文件可能是:

([0, 2, 1])

因此,a数组查找b数组的第一个值,然后在索引此操作时获取其最后3个值。

从这两个数组中,我想要一个像这样的新数组:

# ([[0, 10, 20, 30],
#   [1, 40, 50, 60],
#   [2, 70, 80, 90]])

这是我的循环:

# Loop to put all values in c and d arrays:
for index, value in enumerate(np.nditer(a)):
    c = b[value][1:4]
    d = index
# Stack c and d array into e
e = np.hstack((c, d))

但是回复:

([2, 70, 80, 90])  # Only last line of loop. 
                   # I wish to get last line and all lines before it.

1 个答案:

答案 0 :(得分:2)

不使用for循环,您可以将b的内容复制到e,然后将所有行的e内容替换为第一列(使用 e[:,0]a

import numpy as np
# Array inputs
a = np.array([0, 1, 2])
b = np.array([[1, 10, 20, 30], [2, 40, 50, 60], [3, 70, 80, 90]])
e = np.copy(b)
e[:,0] = a
print(e)

结果:

[[ 0 10 20 30]
 [ 1 40 50 60]
 [ 2 70 80 90]]