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 структурированных массивах, когда вы указываете тип данных как strnumpy Предполагается, что это будет строка из 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]]
Другие вопросы по тегам