我想添加两个dtype数组并获得相同的dtype类型的数组:
>>> dtype=[('p', '<i8'), ('l', '<f8')]
>>> v1 = np.array([(22, 3.14), (4, 0.1)], dtype=dtype)
>>> v1
array([(22, 3.14), (4, 0.1)], dtype=[('p', '<i8'), ('l', '<f8')])
>>> v2 = np.array([(11, 3.14), (6, 0.2)], dtype=dtype)
>>> v2
array([(11, 3.14), (6, 0.2)], dtype=[('p', '<i8'), ('l', '<f8')])
我想得到:
>>> array([(33, 6.28), (10, 0.3)], dtype=[('p', '<i8'), ('l', '<f8')])
但我明白了:
>>> v = v1 + v2
TypeError: unsupported operand type(s) for +: 'numpy.ndarray' and 'numpy.ndarray'
或
>>> v = np.sum(v1, v2)
...
TypeError: cannot perform reduce with flexible type
答案 0 :(得分:3)
可悲的是,我不知道比分别计算每个列更简单的方法:
import numpy as np
dtype=[('p', '<i8'), ('l', '<f8')]
v1 = np.array([(22, 3.14), (4, 0.1)], dtype=dtype)
v2 = np.array([(11, 3.14), (6, 0.2)], dtype=dtype)
v = np.empty_like(v1)
for col in v1.dtype.names:
v[col] = v1[col] + v2[col]
print(v)
# [(33L, 6.28) (10L, 0.30000000000000004)]
但是,如果您安装pandas并制作v1
和v2
DataFrames,那么求和很简单:
import pandas as pd
v1 = pd.DataFrame.from_records(v1)
v2 = pd.DataFrame.from_records(v2)
v = v1 + v2
print(v)
产量
p l
0 33 6.28
1 10 0.30
答案 1 :(得分:1)
如果保留结构化数组并不重要:
In [703]: v=array(v1.tolist())+array(v2.tolist())
In [704]: v
Out[704]:
array([[ 33. , 6.28],
[ 10. , 0.3 ]])
否则,我能提出的最佳方法就是按照@unutbu提到的那样逐列添加。