Как объединить массив строк np с массивом float python

Я хотел бы объединить массив, полный поплавков, с массивом, полным строк. Есть ли способ сделать это?

(У меня также возникают проблемы с округлением моих поплавков, вставка меняет их на научную нотацию; я не могу воспроизвести это на небольшом примере)

A=np.array([[1/3,257/35],[3,4],[5,6]],dtype=float)
B=np.array([7,8,9],dtype=float)
C=np.insert(A,A.shape[1],B,axis=1)
print(np.arround(B,decimals=2))
D=np.array(['name1','name2','name3'])

Как мне добавить D в конец C так же, как я добавил B в A (вставить D как последний столбец C)?

Я подозреваю, что существует проблема типа между строками и числами с плавающей запятой в одном и том же массиве. Это также ответило бы на мои вопросы, если бы был способ изменить число с плавающей запятой (или, может быть, научное число, мои числа отображаются как «5.02512563e-02») на строку, содержащую около 4 цифр (.0502).

Я считаю, что конкатенация не будет работать, потому что размеры массива (3,3) и (,3). D - это одномерный массив, DT ничем не отличается от D. Кроме того, когда я подключаю это, я получаю «ValueError: все входные массивы должны иметь одинаковое количество измерений».

Меня не волнует потеря точности из-за добавления, так как это последний шаг перед печатью.


person Mark    schedule 17.07.2015    source источник


Ответы (2)


Попробуйте сначала сделать D массивом numpy, а затем транспонировать и объединить с C:

D=np.array([['name1','name2','name3']])
np.concatenate((C, D.T), axis=1)

Объяснения и примеры см. в документации по конкатенации: http://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html

person AZhao    schedule 17.07.2015
comment
Поскольку D является одномерным массивом, D.T ничем не отличается от D. - person Mark; 17.07.2015
comment
Я смущен. Как D может быть массивом из одного D и быть добавленным к C? Можете ли вы показать, каков ожидаемый конечный результат? - person AZhao; 17.07.2015

Массивы numpy поддерживают только один тип данных в массиве. Изменение float на str не является хорошей идеей, так как это приведет к значениям, очень близким к исходному значению.

Попробуйте использовать pandas, он поддерживает несколько типов данных в одном столбце.

import numpy as np
import pandas as pd
np_ar1 = np.array([1.3, 1.4, 1.5])
np_ar2 = np.array(['name1', 'name2', 'name3'])
df1 = pd.DataFrame({'ar1':np_ar1})
df2 = pd.DataFrame({'ar2':np_ar2})
pd.concat([df1.ar1, df2.ar2], axis=0)
person shanmuga    schedule 17.07.2015