相关疑难解决方法(0)

将字段添加到结构化的numpy数组中

将字段添加到结构化numpy数组的最简洁方法是什么?它可以破坏性地完成,还是需要创建一个新的数组并复制现有的字段?每个字段的内容是否连续存储在内存中,以便可以有效地完成这种复制?

python numpy

22
推荐指数
2
解决办法
8313
查看次数

以类似字典的方式将新项目添加到某些结构化数组中

我想扩展 numpy 中的结构化数组对象,以便我可以轻松添加新元素。

例如,对于一个简单的结构化数组

>>> import numpy as np
>>> x=np.ndarray((2,),dtype={'names':['A','B'],'formats':['f8','f8']})
>>> x['A']=[1,2]
>>> x['B']=[3,4]
Run Code Online (Sandbox Code Playgroud)

我想轻松添加一个新元素x['C']=[5,6],但随后出现与未定义名称相关的错误'C'

只需添加一个新方法即可np.ndarray

import numpy as np
class sndarray(np.ndarray):
    def column_stack(self,i,x):
        formats=['f8']*len(self.dtype.names)
        new=sndarray(shape=self.shape,dtype={'names':list(self.dtype.names)+[i],'formats':formats+['f8']})
        for key in self.dtype.names:
            new[key]=self[key]

        new[i]=x

        return new
Run Code Online (Sandbox Code Playgroud)

然后,

>>> x=sndarray((2,),dtype={'names':['A','B'],'formats':['f8','f8']})
>>> x['A']=[1,2]
>>> x['B']=[3,4]
>>> x=x.column_stack('C',[4,4])
>>> x
sndarray([(1.0, 3.0, 4.0), (2.0, 4.0, 4.0)], 
  dtype=[('A', '<f8'), ('B', '<f8'), ('C', '<f8')])
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以以类似字典的方式添加新元素?,例如

>>> x['C']=[4,4]
>>> x
sndarray([(1.0, 3.0, 4.0), (2.0, 4.0, 4.0)], 
  dtype=[('A', '<f8'), ('B', '<f8'), ('C', …
Run Code Online (Sandbox Code Playgroud)

python numpy

5
推荐指数
1
解决办法
2047
查看次数

标签 统计

numpy ×2

python ×2