我有一个数组:
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
答案 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,......