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