Tôi đang cố chuyển đổi mảng hai chiều thành mảng có cấu trúc với các trường được đặt tên. Tôi muốn mỗi hàng trong mảng 2D là một bản ghi mới trong mảng có cấu trúc. Thật không may, không có gì tôi đã cố gắng làm việc theo cách tôi mong đợi.Chuyển đổi mảng 2D thành mảng có cấu trúc
tôi bắt đầu với:
>>> myarray = numpy.array([("Hello",2.5,3),("World",3.6,2)])
>>> print myarray
[['Hello' '2.5' '3']
['World' '3.6' '2']]
Tôi muốn chuyển đổi sang cái gì đó trông như thế này:
>>> newarray = numpy.array([("Hello",2.5,3),("World",3.6,2)], dtype=[("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[('Hello', 2.5, 3L) ('World', 3.6000000000000001, 2L)]
Những gì tôi đã cố gắng:
>>> newarray = myarray.astype([("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[[('Hello', 0.0, 0L) ('2.5', 0.0, 0L) ('3', 0.0, 0L)]
[('World', 0.0, 0L) ('3.6', 0.0, 0L) ('2', 0.0, 0L)]]
>>> newarray = numpy.array(myarray, dtype=[("Col1","S8"),("Col2","f8"),("Col3","i8")])
>>> print newarray
[[('Hello', 0.0, 0L) ('2.5', 0.0, 0L) ('3', 0.0, 0L)]
[('World', 0.0, 0L) ('3.6', 0.0, 0L) ('2', 0.0, 0L)]]
Cả hai các phương pháp này cố gắng chuyển đổi từng mục nhập trong myarray thành một bản ghi với dtype đã cho, do đó các số 0 bổ sung được chèn vào. Tôi không thể tìm ra cách để làm cho nó chuyển đổi từng hàng thành một bản ghi.
Một nỗ lực:
>>> newarray = myarray.copy()
>>> newarray.dtype = [("Col1","S8"),("Col2","f8"),("Col3","i8")]
>>> print newarray
[[('Hello', 1.7219343871178711e-317, 51L)]
[('World', 1.7543139673493688e-317, 50L)]]
Lần này không chuyển đổi thực tế được thực hiện. Dữ liệu hiện có trong bộ nhớ chỉ được hiểu là kiểu dữ liệu mới.
Mảng mà tôi đang bắt đầu đang được đọc từ tệp văn bản. Các kiểu dữ liệu không được biết trước, vì vậy tôi không thể đặt kiểu dtype tại thời điểm tạo. Tôi cần một giải pháp hiệu suất cao và thanh lịch sẽ hoạt động tốt cho các trường hợp thông thường vì tôi sẽ thực hiện loại chuyển đổi này nhiều lần, nhiều lần cho nhiều ứng dụng khác nhau.
Cảm ơn!
với 'fromrecords' bạn có thể tránh' transpose() ' –