Создание массива 2D numpy из двоичного файла?

Я использую следующий набор данных, который представляет собой двоичный файл из: http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data

Данные выглядят так:

1350423,5,10,10,8,5,5,7,10,1,4

1352848,3,10,7,8,5,8,7,4,1,4

1353092,3,2,1,2,2,1,3,1,1,2

1354840,2,1,1,1,2,1,3,1,1,2

1354840,5,3,2,1,3,1,1,1,1,2

1355260,1,1,1,1,2,1,2,1,1,2

1365075,4,1,4,1,2,1,1,1,1,2

1365328,1,1,2,1,2,1,2,1,1,2

1368267,5,1,1,1,2,1,1,1,1,2

1368273,1,1,1,1,2,1,1,1,1,2

1368882,2,1,1,1,2,1,1,1,1,2

Бинарный файл имеет 699 таких строк.

Затем я использую приведенный ниже код, чтобы получить данные из двоичного файла, сохраненного как «sample.data», и сохранить его в массиве 2D numpy:

import numpy as np

def main():
    dtype = np.dtype('i8')
    b = np.fromfile('sample.data', dtype=dtype)
    ndata = np.array(b)
    print(ndata.shape)

main()

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

что я могу сделать здесь, чтобы добиться того же?

неработающей ссылке; вам нужно знать информацию о том, как этот массив был сохранен и, возможно, потребуется изменить его форму: b = b.reshape(699, 11)

bubble 10.04.2019 07:11

Изменен вопрос, чтобы отразить, как выглядит двоичный файл.

R_Moose 10.04.2019 07:23

это текстовый файл, вы можете использовать np.loadtxt('sample.data', delimiter=',', dtype=np.object), или лучше использовать панды для таких случаев.

bubble 10.04.2019 07:31

Вы не можете с пользой прочитать число вроде 1350423 как int8, оно требует слишком много байтов и будет переполнено. Есть еще один файл данных, который вы можете использовать, смотрите мой ответ.

kwinkunks 10.04.2019 07:38
Структурированный массив Numpy
Структурированный массив Numpy
Однако в реальных проектах я чаще всего имею дело со списками, состоящими из нескольких типов данных. Как мы можем использовать массивы numpy, чтобы...
0
4
117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я скачал файл http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/unformatted-data и сделал так:

ndata = np.genfromtxt('unformatted-data', skip_header=16, delimiter=',')

Массив ndata имеет форму (699, 11).

Будьте осторожны, потому что там есть разные группы данных (в файле есть комментарии, которые numpy игнорирует), и может не иметь смысла смешивать их все вместе.

Другие вопросы по теме