结构化 numpy 数组未就地修改

arj*_*iva 0 python arrays numpy

我有一个结构化的 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)
Run Code Online (Sandbox Code Playgroud)

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

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

Flo*_*nin 5

您可以反转正在执行的索引:首先选择您感兴趣的字段,该字段返回原始数组的视图(如文档中所述),作为普通的 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)
Run Code Online (Sandbox Code Playgroud)