Python numpy-如何向数组第一列中的每个元素添加值?
我有这样一个数组:Python numpy-如何向数组第一列中的每个元素添加值?,python,numpy,Python,Numpy,我有这样一个数组: array([('6506', 4.6725971801473496e-25, 0.99999999995088695), ('6601', 2.2452745388799898e-27, 0.99999999995270605), ('21801', 1.9849650921836601e-31, 0.99999999997999001), ..., ('45164194', 1.0413482803123399e-24, 0.99
array([('6506', 4.6725971801473496e-25, 0.99999999995088695),
('6601', 2.2452745388799898e-27, 0.99999999995270605),
('21801', 1.9849650921836601e-31, 0.99999999997999001), ...,
('45164194', 1.0413482803123399e-24, 0.99999999997453404),
('45164198', 1.09470356446595e-24, 0.99999999997635303),
('45164519', 3.7521365799080699e-24, 0.99999999997453404)],
dtype=[('pos', '|S100'), ('par1', '<f8'), ('par2', '<f8')])
数组([('6506',4.6725971801473496e-25,0.9999999995088695),
('6601',2.24527453889898E-27,0.9999999995270605),
('21801',1.98496509218601E-31,0.9999999997999001)。。。,
('45164194',1.041348280312399E-24,0.9999999997453404),
('45164198',1.09470356446595e-24,0.9999999997635303),
('45164519',3.75213657999080699E-24,0.9999999997453404)],
dtype=[('pos','S100'),('par1','p>一个简单(尽管可能不是最优)的解决方案就是:
a = np.array([('6506', 4.6725971801473496e-25, 0.99999999995088695),
('6601', 2.2452745388799898e-27, 0.99999999995270605),
('21801', 1.9849650921836601e-31, 0.99999999997999001),
('45164194', 1.0413482803123399e-24, 0.99999999997453404),
('45164198', 1.09470356446595e-24, 0.99999999997635303),
('45164519', 3.7521365799080699e-24, 0.99999999997453404)],
dtype=[('pos', '|S100'), ('par1', '<f8'), ('par2', '<f8')])
a['pos'] = [''.join(('2R:',x)) for x in a['pos']]
In [11]: a
Out[11]:
array([('2R:6506', 4.67259718014735e-25, 0.999999999950887),
('2R:6601', 2.24527453887999e-27, 0.999999999952706),
('2R:21801', 1.98496509218366e-31, 0.99999999997999),
('2R:45164194', 1.04134828031234e-24, 0.999999999974534),
('2R:45164198', 1.09470356446595e-24, 0.999999999976353),
('2R:45164519', 3.75213657990807e-24, 0.999999999974534)],
dtype=[('pos', 'S100'), ('par1', '<f8'), ('par2', '<f8')])
a=np.数组([('6506',4.6725971801473496e-25,0.9999999995088695),
('6601',2.24527453889898E-27,0.9999999995270605),
('21801',1.98496509218601E-31,0.9999999997999001),
('45164194',1.041348280312399E-24,0.9999999997453404),
('45164198',1.09470356446595e-24,0.9999999997635303),
('45164519',3.75213657999080699E-24,0.9999999997453404)],
数据类型=[('pos','S100'),('par1','使用:
来自numpy导入阵列的>>
>>>从numpy.core.defchararray导入添加
>>>
>>>xs=数组([('6506',4.6725971801473496e-25,0.9999999995088695),
…('6601',2.2452745388989898E-27,0.999999995270605),
…('21801',1.98496509218601E-31,0.9999999997999001),
…('45164194',1.041348280312399E-24,0.9999999997453404),
…('45164198',1.09470356446595e-24,0.9999999997635303),
…('45164519',3.75213657999080699E-24,0.9999999997453404)],
…dtype=[('pos','S100'),('par1','另一个稍微快一点的解决方案是使用带有+
运算符的列表理解。虽然我不明白为什么它更快。但它肯定非常优雅和基本
a['pos'] = ["2R:" + x for x in a['pos']]
时间:
%timeit a['pos'] = ["2R:" + x for x in a['pos']]
8.07 ms ± 64.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit a['pos'] = [''.join(('2R:',x)) for x in a['pos']]
9.53 ms ± 391 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit a['pos'] = add('2R:', a['pos'])
14.2 ms ± 337 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
PS:我使用稍微不同的定义创建了数组a
:
a = np.empty(20000, dtype=[('pos', 'U5'), ('par1', '<f8'), ('par2', '<f8')])
a=np.empty(20000,dtype=[('pos','U5'),('par1',,我想我可以只引用第一列并对其应用一个函数,但是我得到了索引错误:无效索引
当我尝试此操作时:array[:,0]
使用np.rec.array
您可以使用array[“pos”]访问这些列
。但我不知道如何以您正在寻找的“字符串添加广播”方式添加任何内容。嗯,我可以使用数组['pos']访问第一列,但我不确定如何从那里修改值。(假设方向正确)可能重复令人印象深刻的解决方案。如果我们要附加(而不是前置)'2R:”
,根据“S100”是否留有足够的空间,此函数处理其任务的方式是否会有显著的不同?(例如,想象数字有98位。)@Eikenberg,根据一项实验(),添加
(都是前置/追加)根据指定的大小截断尾随部分。计时会产生有趣的结果。谢谢!这两种解决方案都会为我抛出错误:join
:TypeError:sequence item 1:expected str instance,numpy.bytes\uuuuuu找到和add
:TypeError:必须是str,而不是numpy.bytes\uuuu
a['pos'] = ["2R:" + x for x in a['pos']]
%timeit a['pos'] = ["2R:" + x for x in a['pos']]
8.07 ms ± 64.2 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit a['pos'] = [''.join(('2R:',x)) for x in a['pos']]
9.53 ms ± 391 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit a['pos'] = add('2R:', a['pos'])
14.2 ms ± 337 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
a = np.empty(20000, dtype=[('pos', 'U5'), ('par1', '<f8'), ('par2', '<f8')])