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')])