Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python
Войти
Регистрация
Восстановить пароль
 
vjg2017
6 / 6 / 3
Регистрация: 14.11.2016
Сообщений: 53
1

Не могу подобрать правильный тип для строки

15.12.2016, 19:04. Просмотров 192. Ответов 1

Читаю книгу , там есть пример: он, естественно, работает.
Вот этот немного модифицированный мною вариант.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
import numpy.random as rand
 
data = np.array(['Bob', 'Mark', 'Roma', 'Roman', 'Roman', 'Bob', 'Roman'], dtype='|S5')
print('Names=')
print(data)
#print(data == 'Roman')
new_arr = rand.randn(7, 3)
print('New_arr=')
print(new_arr)
#print(new_arr)
#print()
print("New mass=")
#Когда я говорю о строках, которые хочу вывести (о трёх), то имею в виду массив new_arr 
print(new_arr[data == 'Roman'])
В примере выше выводятся правильно три последние строки. У нас есть матрица размера (7 на 3), и наша задача -- вывести последнюю строку в этой матрица (с номером 7), затем строку с номером 5 и 4.

Я решил слегка покопаться в коде, и, как полагается, вручную указать типы. Всё перестаёт работать.

Я изменил только одну строку
Python
1
data = np.array(['Bob', 'Mark', 'Roma', 'Roman', 'Roman', 'Bob', 'Roman'], dtype=np.string_)
Вариант не работает. Не выводятся последние три строки с номерами 7, 5 и 4.
Потом я поменял строку на следующую:
Python
1
data = np.array(['Bob', 'Mark', 'Roma', 'Roman', 'Roman', 'Bob', 'Roman'], dtype='|S=5')
Тоже почему не работает.

Вопросы:
1. Почему когда я вручную начал ставить типы для массива, то всё перестало работать? Почему с указанным типом выводится первая строка вместо того, чтобы вывести 7, 5 и 4?
2. Какой тип указать к массиву со строками, чтобы программа показала такой же результат, как и в начальной программе?

Добавлено через 22 минуты
Я немного ошибся с исходной программой, которая работает (опечатка):

Вот правильный вариант, который выводит три строки из матрицы:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
import numpy.random as rand
 
data = np.array(['Bob', 'Mark', 'Roma', 'Roman', 'Roman', 'Bob', 'Roman'])
print('Names=')
print(data)
#print(data == 'Roman')
new_arr = rand.randn(7, 3)
print('New_arr=')
print(new_arr)
#print(new_arr)
#print()
print("New mass=")
#Когда я говорю о строках, которые хочу вывести (о трёх), то имею в виду массив new_arr 
print(new_arr[data == 'Roman'])
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2016, 19:04
Ответы с готовыми решениями:

Тут такое дело , задачка не сложная только метод подобрать не могу
Дано целое число K и текстовый файл. Удалить из файла абзац с номером K (первая...

не могу подобрать тип данных
Здраствуйте. Не могу до конца разобраться с типами данных. Если кто может...

Не могу создать правильный war для деплоя
Добрый день. Пытаюсь создать war для последующего деплоя на Томкат. На моей...

Не могу подобрать видеокарту для компьютера:
Хочу купить видеокарту на 512 МБ, но не знаю, будет ли она работать . Помогите,...

Не могу подобрать кулер для i5 4670
склоняюсь к модели Zalman CNPS14X понять хочу так как с боксовым кулером при...

1
vjg2017
6 / 6 / 3
Регистрация: 14.11.2016
Сообщений: 53
18.12.2016, 02:13  [ТС] 2
Я решил задачу самостоятельно. Начал тупо вбивать всё, что можно (всё, что пришло в голову). Нашёл правильный ответ путём перебора.

Python
1
2
3
4
5
6
7
8
9
10
import numpy as np
import numpy.random as rand
 
names = np.array(["Bob", "Mark", "Roma", "Roman", "Roman", "Bob", "Roman"], dtype=np.str)
 
data = rand.rand(7,4)
print(data)
print()
 
print(data[(names == 'Roman')])
Правильное решение -- тип np.str

То есть у нас была старая программа: она работала со строкой

Python
1
names = np.array(["Bob", "Mark", "Roma", "Roman", "Roman", "Bob", "Roman"])
Оказывается, то же самое можно записать следующим образом

Python
1
names = np.array(["Bob", "Mark", "Roma", "Roman", "Roman", "Bob", "Roman"], dtype=np.str)
Результат окажется тем же: будут выведены из матрицы 7 на 4 строки, соответствующие имени Roman (номера 7, 5 и 4)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2016, 02:13

Не могу подобрать формулу для решения
На олимпиаду необходимо представить по одному ученику по дисциплинам: физика,...

Не могу подобрать формулу для расчётов с банком
В первый день человек взял в долг у банка "Железный" 2 доллара и потратил на...

Аудиокарта для музыки и игр. Не могу подобрать
Здрасьте, хочу прикупить себе аудиокарту для музыки и игр. Бюджет +-5000,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru