Как я могу добавить целое число через один столбец в 2d массиве из двух столбцов, где первый столбец - это строки, а второй - целые числа ... используя numpy? - PullRequest
0 голосов
/ 11 ноября 2019

Я только начинаю изучать Python ...

Я сам практикую некоторые вещи, которые я узнал из DataCamp ...

, что я пытаюсь сделатьэто добавление двух лет к возрасту двух человек в двухмерном массиве ...

например,

people = np.array ([["you ', 20], [" me "), 21]])

Я помню, что с массивами NumPy все элементы должны быть одинаковыми для выполнения, может быть, таких вычислений, как это. Но я не могу просто создать второй массив np.array, а затем выполнитьвычисление по второму столбцу, например, people [:, 1], поскольку только этот столбец является целым числом, и я буду применять вычисление только к этому столбцу? Или это просто невозможно, поскольку в массиве people есть целые числа и строковые значения? * нуб вопрос, но я просто пытаюсь узнать здесь

1 Ответ

2 голосов
/ 11 ноября 2019

Массивы NumPy работают лучше всего, если все элементы имеют одинаковый тип данных. Давайте посмотрим на ваш инициализатор:

>>> people = np.array([['you', 20], ['me', 21]])
array([['you', '20'],
       ['me', '21']], dtype='<U3')

NumPy увидел эти строки и вывел тип данных <U3, то есть строки Юникода с прямым порядком байтов длины 3. Если вы хотите выполнить арифметику для второго столбца, это не то, что вы хотите. Вы можете установить более общий тип данных в конструкторе:

>>> people = np.array([['you', 20], ['me', 21]], dtype='object')
array([['you', 20],
       ['me', 21]], dtype=object)

В общем, наличие типа данных object невелико, поскольку оно неэффективно (и я полагаю, что некоторые функции не будут работать должным образомэти массивы). Тем не менее, желаемая арифметика работает сейчас. Давайте состарим всех на 30 лет:

>>> people[:, 1] += 30
array([['you', 50],
       ['me', 51]], dtype=object)

В заключение: если вы можете избежать этого, не используйте строки с числами в одном и том же массиве NumPy. Возможно, для ваших целей подойдет два отдельных массива. В более долгосрочной перспективе я бы порекомендовал вам попробовать Pandas , который предназначен для обработки гораздо более общих и смешанных наборов данных.

...