Cách để thực hiện việc này bằng cách gọn gàng là sử dụng structured array.
Tuy nhiên, trong nhiều trường hợp bạn đang sử dụng dữ liệu không đồng nhất, danh sách trăn đơn giản là một sự lựa chọn tốt hơn là nhiều hơn. (Hoặc, mặc dù nó không có sẵn rộng rãi khi câu trả lời này được viết, một pandas.DataFrame
là hoàn toàn lý tưởng cho trường hợp này.)
Bất kể, ví dụ bạn đưa ra ở trên sẽ hoạt động hoàn hảo như một mảng "bình thường". Bạn chỉ có thể làm mọi thứ nổi trong ví dụ bạn đã đưa ra. (Tất cả mọi thứ dường như là một int, ngoại trừ hai cột phao ... Các bools có thể dễ dàng được biểu diễn như ints.)
Tuy nhiên, để minh họa sử dụng dtypes có cấu trúc ...
import numpy as np
ua = 5 # No idea what "ua" is in your code above...
low_inc, med_inc = 0.5, 2.0 # Again, no idea what these are...
num = 100
num_fields = 11
# Use more descriptive names than "col1"! I'm just generating the names as placeholders
dtype = {'names':['col%i'%i for i in range(num_fields)],
'formats':2*[np.int] + 2*[np.float] + 2*[np.int] + 2*[np.bool] + 3*[np.int]}
data = np.zeros(num, dtype=dtype)
# Being rather verbose...
data['col0'] = np.arange(num, dtype=np.int)
data['col1'] = int(ua) * np.ones(num)
data['col2'] = np.random.uniform(low_inc/2, med_inc * 2, num)
data['col3'] = np.random.uniform(0, 6, num)
data['col4'] = np.random.randint(100, 5000, num)
data['col5'] = np.random.randint(100, 500, num)
data['col6'] = np.random.randint(0, 2, num).astype(np.bool)
data['col7'] = np.random.randint(0, 2, num).astype(np.bool)
data['col8'] = np.random.randint(100, 5000, num)
data['col9'] = np.random.randint(100, 5000, num)
data['col10'] = np.random.randint(100, 5000, num)
print data
Những sản lượng mảng 100 phần tử có 11 trường:
array([ (0, 5, 2.0886534380436226, 3.0111285613794276, 3476, 117, False, False, 4704, 4372, 4062),
(1, 5, 2.0977199579338115, 1.8687472941590277, 4635, 496, True, False, 4079, 4263, 3196),
...
...
(98, 5, 1.1682309811443277, 1.4100766819689299, 1213, 135, False, False, 1250, 2534, 1160),
(99, 5, 1.746554619056416, 5.210411489007637, 1387, 352, False, False, 3520, 3772, 3249)],
dtype=[('col0', '<i8'), ('col1', '<i8'), ('col2', '<f8'), ('col3', '<f8'), ('col4', '<i8'), ('col5', '<i8'), ('col6', '|b1'), ('col7', '|b1'), ('col8', '<i8'), ('col9', '<i8'), ('col10', '<i8')])
có cách nào khác để sử dụng tệp np.array không? – dassouki
Chính xác thì bạn đang cố gắng làm gì? Tôi nghĩ về việc gumpy như tăng tốc độ toán học: nhân ma trận, hoặc lấy cosin của một bó toàn bộ đầu vào. Nếu không biết nhiều hơn về những gì bạn đang làm, tất cả những gì tôi có thể gợi ý là một danh sách Python thông thường. – mtrw