Массивы 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 , который предназначен для обработки гораздо более общих и смешанных наборов данных.