这是here的延续。
如果我有一个数组a
而数组b
和a
可能小于或大于b
。有没有办法,将{作为基数组{ {1}},用a
的元素替换b
的所有元素(逐个元素)?
例如,这可行,因为a
包含与a
一样多的元素:
b
现在,例如,import numpy as np
a = np.array([1,2,3,4,5,6,7,8])
b = np.array([[1,2,3,4],[11,22,33,44]])
print(b[0].shape)
i= 0
for el in b:
for idx,x in enumerate(el):
el[idx] = a[i]
i+= 1
print(b)
[[1 2 3 4]
[5 6 7 8]]
可以是:
a
和a = np.array([1,2,3,4,5])
:
b
我想要的结果是b = np.array([11,22,33,44])
,因为b = [1,2,3,4,5]
的所有4个元素都被b
的前4个元素替换,我又向a
添加了一个元素(最后一个b
),以便与a
(我的参考数组)的大小相同。
如果我有:
a
和a = np.array([1,2,3])
,然后结果b数组将是:b = np.array([6,7,8,9])
,因此我从b = [1,2,3]
中删除了一个元素(与{{1}的大小相同}}并用b
元素替换其余部分。
现在,整个问题是:
我将拥有一个数组,其数量为a
大小的倍数。
所以,a
a
a = np.array([1,2,3,4,5])
我想将arr = np.array([1,2,3,4,5,6,7,8,9,10])
中的元素替换为b = np.array([[0,1,2,3], [4,5,6,7]])
的倍数arr
(因此为5)。
所以,最后b
答案 0 :(得分:3)
我想你想要
b = arr.reshape(-1, a.size)
b
Out[291]:
array([[ 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10]])
答案 1 :(得分:2)
尝试列表切片,假设b总是2d或1d
import numpy as np
arr = np.array([1,2,3,4,5,6,7,8,9,10])
a = np.array([1,2,3,4,5])
b = np.array([[1,2,3,4],[11,22,33,44]])
print(b[0].shape)
list_arr = arr.tolist()
slice_factor = a.size
j=0
temp = []
for j in range(0,len(list_arr),slice_factor):
k = min(j + slice_factor,len(list_arr))
temp.append(list_arr[j:k])
b = np.array(temp)
print(b)
[[1 2 3 4 5]
[6 7 8 9 10]]