首页 > 解决方案 > python:如何在循环中在numpy数组中插入元素

问题描述

我有以下格式的字典:

{1: 7, 2: 1, 4: 2, 5: 1, ...}

字典可能非常大,所以我决定使用numpy库来更有效地处理向量。

现在我需要将上述字典中的numpy插入到索引处的向量(一维数组)中key。所以天真地尝试了以下方法:

import numpy as np

d = {1: 7, 2: 1, 4: 2, 5: 1}
T = np.zeros(shape=(n), dtype=np.int16)

for k, v in d.items():
    N = np.insert(T, k, v)

print(N)

但是insert方法总是返回数组,并在我的示例中new覆盖。N那么改变数组元素的正确方法是什么,就像我在 C 中所做的那样,例如T[0] = 1.

貌似numpy不允许这样?

谢谢。

更新 正如 Divakar 所建议的,解决方案是一次分配多个值:

T[list(d.keys())] = list(d.values())

这不需要循环。

标签: arrayspython-3.xnumpydictionary

解决方案


Innumpy np.insert通过拆分原始数组并在中间某处插入一个或多个值来创建一个新数组。

In [193]: arr = np.arange(6)                                                    
In [194]: arr                                                                   
Out[194]: array([0, 1, 2, 3, 4, 5])
In [195]: np.insert(arr, 2, 100)                                                
Out[195]: array([  0,   1, 100,   2,   3,   4,   5])

有时人们谈论向数组添加值,但 `+' 是元素数字加法

In [196]: arr + 10                                                              
Out[196]: array([10, 11, 12, 13, 14, 15])
In [197]: 'one '+'two'        # string 'addition'                                                          
Out[197]: 'one two'

“分配一个值”可能是您想要做的最清晰的描述。你想修改原始数组的一个元素,而不改变它的大小。

In [198]: arr[3] = 100                                                          
In [199]: arr                                                                   
Out[199]: array([  0,   1,   2, 100,   4,   5])

@Divakar 的想法一次分配多个值:

In [200]: arr[[1,2]] = [100,200]                                                
In [201]: arr                                                                   
Out[201]: array([  0, 100, 200, 100,   4,   5])

推荐阅读