NumPy - устанавливает значения в структурированном массиве на основе других значений в структурированном массиве.
У меня есть структурированный массив NumPy:
a = numpy.zeros((10, 10), dtype=[
("x", int),
("y", str)])
Я хочу установить значения в a["y"]
либо "hello"
если соответствующее значение в a["x"]
отрицательно. Насколько я могу сказать, я должен делать это так:
a["y"][a["x"] < 0] = "hello"
Но это, кажется, меняет значения в a["x"]
! В чем проблема с тем, что я делаю, и как еще мне это сделать?
1 ответ
Прежде всего, в numy структурированных массивах, когда вы указываете тип данных как str
numpy
Предполагается, что это будет строка из 1 символа.
>>> a = numpy.zeros((10, 10), dtype=[
("x", int),
("y", str)])
>>> print a.dtype
dtype([('x', '<i8'), ('y', 'S')])
В результате вводимые вами значения усекаются до 1 символа.
>>> a["y"][0][0] = "hello"
>>> print a["y"][0][0]
h
Следовательно, используйте тип данных как a10
Где 10 - максимальная длина вашей строки.
Ссылка на эту ссылку, которая определяет больше определений для других структур данных.
Во-вторых, ваш подход кажется мне правильным.
Инициирование структурированного массива numpy с типом данных int и a10
>>> a = numpy.zeros((10, 10), dtype=[("x", int), ("y", 'a10')])
Заполнение его случайными числами
>>> a["x"][:] = numpy.random.randint(-10, 10, (10,10))
>>> print a["x"]
[[ 2 -4 -10 -3 -4 4 3 -8 -10 2]
[ 5 -9 -4 -1 9 -10 3 0 -8 2]
[ 5 -4 -10 -10 -1 -8 -1 0 8 -4]
[ -7 -3 -2 4 6 6 -8 3 -8 8]
[ 1 2 2 -6 2 -9 3 6 6 -6]
[ -6 2 -8 -8 4 5 8 7 -5 -3]
[ -5 -1 -1 9 5 -7 2 -2 -9 3]
[ 3 -10 7 -8 -4 -2 -4 8 5 0]
[ 5 6 5 8 -8 5 -10 -6 -2 1]
[ 9 4 -8 6 2 4 -10 -1 9 -6]]
Применение вашей фильтрации
>>> a["y"][a["x"]<0] = "hello"
>>> print a["y"]
[['' 'hello' 'hello' 'hello' 'hello' '' '' 'hello' 'hello' '']
['' 'hello' 'hello' 'hello' '' 'hello' '' '' 'hello' '']
['' 'hello' 'hello' 'hello' 'hello' 'hello' 'hello' '' '' 'hello']
['hello' 'hello' 'hello' '' '' '' 'hello' '' 'hello' '']
['' '' '' 'hello' '' 'hello' '' '' '' 'hello']
['hello' '' 'hello' 'hello' '' '' '' '' 'hello' 'hello']
['hello' 'hello' 'hello' '' '' 'hello' '' 'hello' 'hello' '']
['' 'hello' '' 'hello' 'hello' 'hello' 'hello' '' '' '']
['' '' '' '' 'hello' '' 'hello' 'hello' 'hello' '']
['' '' 'hello' '' '' '' 'hello' 'hello' '' 'hello']]
проверка a["x"]
>>> print a["x"]
[[ 2 -4 -10 -3 -4 4 3 -8 -10 2]
[ 5 -9 -4 -1 9 -10 3 0 -8 2]
[ 5 -4 -10 -10 -1 -8 -1 0 8 -4]
[ -7 -3 -2 4 6 6 -8 3 -8 8]
[ 1 2 2 -6 2 -9 3 6 6 -6]
[ -6 2 -8 -8 4 5 8 7 -5 -3]
[ -5 -1 -1 9 5 -7 2 -2 -9 3]
[ 3 -10 7 -8 -4 -2 -4 8 5 0]
[ 5 6 5 8 -8 5 -10 -6 -2 1]
[ 9 4 -8 6 2 4 -10 -1 9 -6]]