【问题标题】:Structured numpy array not modified in place结构化 numpy 数组未就地修改
【发布时间】:2022-10-12 21:43:56
【问题描述】:

我有一个结构化的 numpy 数组,我正在尝试就地修改它,但没有反映新值。

import numpy as np

dt = {'names':['A', 'B', 'C'],
        'formats': [np.int64, np.int64, np.dtype('U8')]}
arr = np.empty(0, dtype=dt)

arr = np.append(arr, np.array([(1, 100, 'ab')], dtype = dt))
arr = np.append(arr, np.array([(2, 800, 'ax')], dtype = dt))
arr = np.append(arr, np.array([(3, 700, 'asb')], dtype = dt))
arr = np.append(arr, np.array([(4, 600, 'gdf')], dtype = dt))
arr = np.append(arr, np.array([(5, 500, 'hfg')], dtype = dt))

print(arr)

arr[arr['A'] == 1]['B'] = 555

print(arr)

甚至可以更改结构化数组中的值吗?解决方法是什么?

请不要建议 Pandas 或其他基于库的解决方案因为我只被允许在工作中使用 numpy。

【问题讨论】:

  • 作为示例,您正在创建一个副本,然后对其进行修改。

标签: python arrays numpy


【解决方案1】:

你可以反转你正在做的索引:首先选择你感兴趣的字段,它返回一个原始数组的视图(如the documentation中所述),作为一个普通的numpy数组,你可以修改:

import numpy as np

dt = {'names':['A', 'B', 'C'],
        'formats': [np.int64, np.int64, np.dtype('U8')]}
arr = np.empty(0, dtype=dt)

arr = np.append(arr, np.array([(1, 100, 'ab')], dtype = dt))
arr = np.append(arr, np.array([(2, 800, 'ax')], dtype = dt))
arr = np.append(arr, np.array([(3, 700, 'asb')], dtype = dt))
arr = np.append(arr, np.array([(4, 600, 'gdf')], dtype = dt))
arr = np.append(arr, np.array([(5, 500, 'hfg')], dtype = dt))

print(arr)

arr['B'][arr['A'] == 1] = 555

print(arr)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-29
    • 2011-05-05
    • 2019-03-18
    • 2019-02-20
    • 2019-05-08
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    相关资源
    最近更新 更多