基于一个引用数组向数组添加和删除元素

时间:2017-02-16 07:46:44

标签: python numpy

这是here的延续。

如果我有一个数组a而数组ba可能小于或大于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(我的参考数组)的大小相同。

如果我有:

aa = 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

2 个答案:

答案 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]]