Numpy yapılandırılmış diziler adında var sütunlar:
import numpy as np
a=range(100)
A = np.array(zip(*[iter(a)]*2),dtype=[('C1','int32'),('C2','int64')])
print(A.dtype)
# [('C1', '<i4'), ('C2', '<i8')]
Böyle adıyla sütunları erişebilirsiniz:
print(A['C1'])
# [ 0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48
# 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98]
Not zip
ile np.array
kullanarak geçici bir dizi oluşturmak için numpy neden olduğunu tupl listesi. Python listelerinin listesi, eşdeğer NumPy dizilerinden çok daha fazla bellek kullanır. Yani diziniz çok büyükse, zip
'u kullanmak istemeyebilirsiniz.
Bunun yerine, NumPy dizisi A
, sen A
bir 1D dizi yapmak için ravel()
kullanın ve sonra yapısal bir diziye çevirmek için view
kullanın ve daha sonra istenen türüne sütunlar dönüştürmek için astype
kullanabilirsiniz verilen:
a = range(100)
A = array(a).reshape(len(a)/2, 2)
A = A.ravel().view([('col1','i8'),('col2','i8'),]).astype([('col1','i4'),('col2','i8'),])
print(A[:5])
# array([(0, 1), (2, 3), (4, 5), (6, 7), (8, 9)],
# dtype=[('col1', '<i4'), ('col2', '<i8')])
print(A.dtype)
# dtype([('col1', '<i4'), ('col2', '<i8')])
En iyi seçeneğiniz diziyi (aslında 2) ve bir ad listesini kapsayıcı sınıfına sarmak ve kullanmaktır. – Keith
@Keith: Belli bir sınıfı mı kastediyorsunuz (numpy'de yeniyim)? –
Hayır, yarattığınız kişi. Ardından işlemleri yeni sınıfınızda tanımladığınız yöntemlerden dizilerinize aktarırsınız. Ayrıca, dizilerinizi üstbilgilerle güzel yazdırmak için bir '__str__' yöntemi tanımlayın. – Keith