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]