Решение
Попробуйте или / или из следующих методов. Я думаю, что второй метод будет работать в вашем случае.
import numpy as np
# Method-1: 2 elements' tuple array data for feature_names
np.hstack([image_features.astype('O'), feature_names[:, np.newaxis])
# Method-2: 2 columns array data for feature_names
np.hstack([image_features.astype('O'),
np.array(feature_names.tolist()).reshape(-1,2).astype('O')])
# Method-3: using pandas
import pandas as pd
df1 = pd.DataFrame(image_features)
df2 = pd.DataFrame(np.array(feature_names.tolist()).reshape(-1,2).astype('O'), columns=['ID', 'Gender'])
df = pd.merge(df1, df2, left_index=True, right_index=True)
#df.head()
df.to_numpy()
Пример
Мы сделаем некоторые фиктивные данные и протестируем решение, указанное выше.
import numpy as np
image_features = np.random.rand(2,10).round(3)
feature_names = np.array([('00007787805e474ea3f33c722178f550', 'Male'),
('00007787805e474ea3f33c722223f550', 'Female')],
dtype=[('ID', 'O'),('Gender', 'O')])
print('Shape BEFORE newaxis addition: {}'.format((image_features.shape,
feature_names.shape)))
feature_names = feature_names[:, np.newaxis]
print('Shape AFTER newaxis addition: {}'.format((image_features.shape,
feature_names.shape)))
stacked = np.hstack([image_features.astype('O'), feature_names])
print(stacked)
Вывод:
Shape BEFORE newaxis addition: ((2, 10), (2,))
Shape AFTER newaxis addition: ((2, 10), (2, 1))
[[0.335 0.576 0.769 0.442 0.34 0.938 0.745 0.085 0.617 0.643
('00007787805e474ea3f33c722178f550', 'Male')]
[0.689 0.959 0.57 0.122 0.328 0.421 0.176 0.797 0.364 0.495
('00007787805e474ea3f33c722223f550', 'Female')]]
Для большей ясности воспользуемся пандами, чтобы показать это:
import pandas as pd
print(pd.DataFrame(stacked))
0 1 ... 9 10
0 0.335 0.576 ... 0.643 (00007787805e474ea3f33c722178f550, Male)
1 0.689 0.959 ... 0.495 (00007787805e474ea3f33c722223f550, Female)