Как создать двухмерный массив из блока строк - PullRequest
3 голосов
/ 09 октября 2019

С пониманием списка, я могу взять блок чисел 20x20 в строковом формате и преобразовать его в список списков целых чисел. Числа разделены пробелом, а строки разделены новой строкой.

grid = [[int(x) for x in line.split()] for line in nums.split('\n')]

Однако я хочу использовать numpy для его скорости. Я мог бы использовать np.asarray () с моим промежуточным списком, но я не думаю, что это эффективное использование numpy.

Я также пытался использовать np.fromstring(), но я не могу понять логику длязаставить его работать для 2D-массива.

Есть ли способ выполнить эту задачу без создания промежуточных списков Python?

Ответы [ 2 ]

4 голосов
/ 09 октября 2019

Вы можете использовать np.fromstring, задавая пробел в качестве разделителя и reshape желаемую форму:

np.fromstring(s, sep=' ').reshape(20, 20)

Или как более общее решение, следуя @Решение Михаммада:

rows = s.count('\n') + 1
np.fromstring(s, sep=' ').reshape(-1, rows)
2 голосов
/ 09 октября 2019

Более общий для любой 2D сетки:

rows = s.count('\n') + 1
np.fromstring(s, sep=' ').reshape(rows, -1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...