python数组添加列_python – 如何添加列到numpy数组

我认为你的问题是,你期待np.append添加列在原地,但它做了什么,因为如何存储数字数据,是创建一个连接的数组的副本

Returns

-------

append : ndarray

A copy of `arr` with `values` appended to `axis`. Note that `append`

does not occur in-place: a new array is allocated and filled. If

`axis` is None, `out` is a flattened array.

所以你需要保存输出all_data = np.append(…):

my_data = np.random.random((210,8)) #recfromcsv('LIAB.ST.csv', delimiter='\t')

new_col = my_data.sum(1)[...,None] # None keeps (n, 1) shape

new_col.shape

#(210,1)

all_data = np.append(my_data, new_col, 1)

all_data.shape

#(210,9)

替代方式:

all_data = np.hstack((my_data, new_col))

#or

all_data = np.concatenate((my_data, new_col), 1)

我相信这三个函数(以及np.vstack)之间的唯一区别是它们未指定axis时的默认行为:

> concatenate假定axis = 0

> hstack假定axis = 1,除非输入为1d,然后axis = 0

>如果输入为1d,则vstack在添加轴后假设axis = 0

> append flattens数组

根据您的评论,并更仔细地查看您的示例代码,我现在相信您可能想要做的是将字段添加到record array.您导入了返回structured array的genfromtxt和返回微妙不同的record array (recarray)的recfromcsv.你使用了recfromcsv,所以现在my_data实际上是一个重新编码,这意味着由于重新记录,最有可能的是my_data.shape =(210,),它们是1d数组的记录,其中每个记录是一个给定dtype的元组.

所以你可以试试这个:

x = np.random.random(10)

y = np.random.random(10)

z = np.random.random(10)

data = np.array( zip(x,y,z), dtype=[('x',float),('y',float),('z',float)])

data = np.recarray(data.shape, data.dtype, buf=data)

data.shape

#(10,)

tot = data['x'] + data['y'] + data['z'] # sum(axis=1) won't work on recarray

tot.shape

#(10,)

all_data = append_fields(data, 'total', tot, usemask=False)

all_data

#array([(0.4374783740738456 , 0.04307289878861764, 0.021176067323686598, 0.5017273401861498),

# (0.07622262416466963, 0.3962146058689695 , 0.27912715826653534 , 0.7515643883001745),

# (0.30878532523061153, 0.8553768789387086 , 0.9577415585116588 , 2.121903762680979 ),

# (0.5288343561208022 , 0.17048864443625933, 0.07915689716226904 , 0.7784798977193306),

# (0.8804269791375121 , 0.45517504750917714, 0.1601389248542675 , 1.4957409515009568),

# (0.9556552723429782 , 0.8884504475901043 , 0.6412854758843308 , 2.4853911958174133),

# (0.0227638618687922 , 0.9295332854783015 , 0.3234597575660103 , 1.275756904913104 ),

# (0.684075052174589 , 0.6654774682866273 , 0.5246593820025259 , 1.8742119024637423),

# (0.9841793718333871 , 0.5813955915551511 , 0.39577520705133684 , 1.961350170439875 ),

# (0.9889343795296571 , 0.22830104497714432, 0.20011292764078448 , 1.4173483521475858)],

# dtype=[('x', '

all_data.shape

#(10,)

all_data.dtype.names

#('x', 'y', 'z', 'total')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值