【问题标题】:python: how to insert elements in numpy array in a looppython:如何在循环中在numpy数组中插入元素
【发布时间】:2019-11-29 16:13:40
【问题描述】:

我有一本如下格式的字典:

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

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

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

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())

而且这不需要循环。

【问题讨论】:

  • n 参数是什么?
  • T[list(d.keys())] = list(d.values())?
  • @Divakar,非常感谢。这确实是一个非常优雅的解决方案,哪里说numpy数组对象可以带一个列表作为参数?
  • 不知道你是怎么被带到numpy array object taking a list as parameter的。这是一个简单的基于整数的索引 - docs.scipy.org/doc/numpy/reference/…
  • @Divakar,我是 Python 新手。在您的评论中,您执行了list(d.keys()),它从字典中返回一个键列表,然后将其作为索引提交给T 对象。

标签: arrays python-3.x numpy dictionary


【解决方案1】:

numpy 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'

'assign a value(s)' 可能是对您想要做什么的最清晰的描述。你想修改原始数组的一个元素,而不改变它的大小。

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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 2021-12-17
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多