Python 在数组中的特定位置插入

Python 在数组中的特定位置插入,python,arrays,python-3.x,numpy,Python,Arrays,Python 3.x,Numpy,我有一个数组[0 10 15 20 0 35 25 15 35 0 30 20 25 30],我需要在增量为5的位置插入另一个数组“[5,7,8,15]”的每个元素,以便最终数组看起来[0 10 15 20 5 10 0 35 7 15 30 8 20 25 0 15]长度为20 我正在尝试使用此代码 arr_fla = [ 0 10 15 20 10 0 35 25 15 35 0 30 20 25 30 0] arr_split = [5,7,8,15] node = 5

我有一个数组
[0 10 15 20 0 35 25 15 35 0 30 20 25 30]
,我需要在增量为5的位置插入另一个数组“[5,7,8,15]”的每个元素,以便最终数组看起来
[0 10 15 20 5 10 0 35 7 15 30 8 20 25 0 15]长度为20

我正在尝试使用此代码

arr_fla = [ 0 10 15 20 10  0 35 25 15 35  0 30 20 25 30  0]
arr_split = [5,7,8,15]
node = 5   
    node_len = node * (node-1)
    
    for w in range(node, node_len, 5):
        for v in arr_split:
            arr_fla = np.insert(arr_fla,w,v)
    print(arr_fla)
我得到的结果是

'[ 0 10 15 20 10 15  8  7  5  0 15  8  7  5 35 15  8  7  5 25 15 35  0 30
 20 25 30  0]' length 28
谁能告诉我哪里出了问题。

我已经改正了:

arr_fla = [0,10,15,20,10,0,35,25,15,35,0,30,20,25,30,0]
arr_split = [5,7,8,15]
node = 5
    
for w in range(len(arr_split)):
    arr_fla = np.insert(arr_fla, (w+1)*node-1, arr_split[w])
print(arr_fla)

'''
Output:
[ 0 10 15 20  5 10  0 35 25  7 15 35  0 30  8 20 25 30  0 15]
'''
在代码中:

for v in arr_split:

这将一次获取所有元素(总共
w
次),但一次只需要一个元素。因此,对于循环,您不需要额外的

您希望在每次插入第二个数组
中的项目时,计数器都会不断上升

试试这个代码。我的假设是,可以直接插入最后一个元素,因为原始数组只有16个元素

arr_fla = [0,10,15,20,10,0,35,25,15,35,0,30,20,25,30,0]
arr_split = [5,7,8,15]

j = 0 #use this as a counter to insert from arr_split

#start iterating from 4th position as you want to insert in the 5th position

for i in range(4,len(arr_fla),5): 

    arr_fla.insert(i,arr_split[j]) #insert at the 5th position every time
    #every time you insert an element, the array size increase

    j +=1 #increase the counter by 1 so you can insert the next element

arr_fla.append(arr_split[j]) #add the final element to the original array 
print(arr_fla)
输出:

[0, 10, 15, 20, 5, 10, 0, 35, 25, 7, 15, 35, 0, 30, 8, 20, 25, 30, 0, 15]

您可以将列表拆分为偶数块,将拆分值附加到每个块,然后重新组装整个列表(函数归功于Ned Batchelder):

产出:

[0, 10, 15, 20, 10, 5, 0, 35, 25, 15, 35, 7, 0, 30, 20, 25, 30, 8, 0, 15]

如果尺寸与示例中一样整齐排列,则可以使用
重塑

np.reshape(arr_fla,(len(arr_split),-1))
# array([[ 0, 10, 15, 20],
#        [10,  0, 35, 25],
#        [15, 35,  0, 30],
#        [20, 25, 30,  0]])
。。。追加
arr\u split
作为新列

np.c_[np.reshape(arr_fla,(len(arr_split),-1)),arr_split]
# array([[ 0, 10, 15, 20,  5],
#        [10,  0, 35, 25,  7],
#        [15, 35,  0, 30,  8],
#        [20, 25, 30,  0, 15]])
。。。然后再变平

np.c_[np.reshape(arr_fla,(len(arr_split),-1)),arr_split].ravel()
# array([ 0, 10, 15, 20,  5, 10,  0, 35, 25,  7, 15, 35,  0, 30,  8, 20, 25,
#        30,  0, 15]) 

您可以切换到下面,并尝试一下

将numpy导入为np
arr_fla=[0,10,15,20,10,0,35,25,15,35,0,30,20,25,30,0]
arr_split=[5,7,8,15]
指数=4
对于arr_分割中的ele:
arr\u fla=np.插入(arr\u fla,索引,ele)
指数+=5
印刷品(阿鲁佛罗里达州)
结果是

[ 0 10 15 20  5 10  0 35 25  7 15 35  0 30  8 20 25 30  0 15]
关于你的错误部分,我认为有两个问题:

  • 第二个循环是不需要的,它将导致np在同一位置插入arr_分割的所有元素
  • 该位置不是从5开始,应该是4

  • 将元素插入数组时,元素将向右移动。根据最终数组,看起来您只想将
    arr\u split
    中的一个元素添加到
    arr\u fla
    中。查看您的insert语句是否正在运行that@JoeFerndz在《阿拉福利亚》中,我有16个元素。我想在5、10、15和20的位置插入“arr_split”的每个元素,这样数组现在就有20个元素了。“arr_split”中的每个元素在各自的位置正好有一次。@JoeFerndz,它正在该位置添加所有元素,我只需要一个。与np相比,这似乎也提供了轻微的性能提升。insert@MrFuppes如果你想要它快,你应该避免np.c,这是为了方便,而不是为了速度。并使用
    np.连接
    。但是,必须手动重新塑造arr_split的形状。
    
    [ 0 10 15 20  5 10  0 35 25  7 15 35  0 30  8 20 25 30  0 15]