按元素替换元素不同的数组

时间:2017-02-15 09:57:24

标签: python numpy

我有一个数组:

a = np.array([1,2,3,4,5,6,7,8])

可以将数组重新整形为a = np.array([[1,2,3,4],[5,6,7,8]]),无论更方便。

现在,我有一个数组:

b = np.array([[11,22,33,44], [55,66,77,88]])

我想从a。

中替换每个元素中的相应元素

a数组将始终包含与b一样多的元素。

因此,数组b将是:

[1,2,3,4], [5,6,7,8]

注意,我必须将每个b子阵列维度保持为(4,)。我不想更改它。所以,idx将从0 to 3获取值。我想让a适合every four values

我正在努力重塑,分裂,面具..等等,我无法想办法。

import numpy as np

#a = np.array([[1,2,3,4],[5,6,7,8]])
a = np.array([1,2,3,4,5,6,7,8])


b = np.array([[11,22,33,44], [55,66,77,88]])

for arr in b:
    for idx, x in enumerate(arr):
        replace every arr[idx] with corresponding a value

4 个答案:

答案 0 :(得分:2)

对于你目前的情况,你想要的可能是:

b, c = list(a.reshape(2, -1))

这不是最干净的,但它是一个单行。将您的1D数组转换为2D数组,第一维为reshape(2, -1)为2,然后list将其沿第一维拆分,以便您可以直接将它们分配给b, c

您也可以使用专业功能numpy.split

b, c = np.split(a, 2)

编辑:基于已接受的解决方案,执行此操作的矢量化方式是

b = a.reshape(b.shape)

答案 1 :(得分:1)

以下对我有用:

i = 0
for arr in b:
    for idx, x in enumerate(arr):
        arr[idx] = a[i]
        print(arr[idx])
        i += 1

输出(arr [idx]):1 2 3 4 5 6 7 8 如果您输入print(b),则输出[[1 2 3 4] [5 6 7 8]]

答案 2 :(得分:0)

b = a[:len(a)//2] c = a[len(a)//2:]

答案 3 :(得分:0)

嗯,我对Python很陌生,但这对我有用:

    for i in range (0, len(a)//2):
        b[i] = a[i]
    for i in range (len(a)//2,len(a)):
        c[i-4] = a[i]

通过打印3个数组,我有以下输出:

[1 2 3 4 5 6 7 8]
[1 2 3 4]
[5 6 7 8]

但我会选择Daniel的解决方案(拆分):1个班轮,使用numpy API,......