12 টি বিভিন্ন অ্যারের মান সহ এই উদাহরণটি সাহায্য করবে:
In [207]: x=np.arange(12).reshape(3,4).copy()
In [208]: x.flags
Out[208]:
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
...
In [209]: x.T.flags
Out[209]:
C_CONTIGUOUS : False
F_CONTIGUOUS : True
OWNDATA : False
...
C orderমান যাতে তারা এ উত্পন্ন হয় আছে। পক্ষান্তরিত বেশী নয়
In [212]: x.reshape(12,)
Out[212]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
In [213]: x.T.reshape(12,)
Out[213]: array([ 0, 4, 8, 1, 5, 9, 2, 6, 10, 3, 7, 11])
আপনি উভয়ের 1 ডি ভিউ পেতে পারেন
In [214]: x1=x.T
In [217]: x.shape=(12,)
আকৃতি xপরিবর্তন করা যেতে পারে।
In [220]: x1.shape=(12,)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-220-cf2b1a308253> in <module>()
----> 1 x1.shape=(12,)
AttributeError: incompatible shape for a non-contiguous array
তবে ট্রান্সপোজোর আকার পরিবর্তন করা যায় না। dataএখনও 0,1,2,3,4...আদেশ, যা অ্যাক্সেস করা যাবে না অ্যাক্সেস 0,4,8...একটি 1d অ্যারের মধ্যে।
তবে একটি অনুলিপি x1পরিবর্তন করা যেতে পারে:
In [227]: x2=x1.copy()
In [228]: x2.flags
Out[228]:
C_CONTIGUOUS : True
F_CONTIGUOUS : False
OWNDATA : True
...
In [229]: x2.shape=(12,)
তাকানো stridesএছাড়াও সাহায্য করতে পারে। একটি অগ্রগতি হ'ল পরের মানটি পেতে কতদূর (বাইটে) পদক্ষেপ নিতে হবে। একটি 2 ডি অ্যারের জন্য, 2 টি ধাপের মান হবে:
In [233]: x=np.arange(12).reshape(3,4).copy()
In [234]: x.strides
Out[234]: (16, 4)
পরবর্তী সারিতে পৌঁছতে, 16 বাইট পদক্ষেপ করুন, পরবর্তী কলামটি কেবল 4।
In [235]: x1.strides
Out[235]: (4, 16)
স্থানান্তর কেবল স্ট্রাইজের ক্রম পরিবর্তন করে। পরের সারিটি মাত্র 4 বাইট - অর্থাৎ পরবর্তী সংখ্যা।
In [236]: x.shape=(12,)
In [237]: x.strides
Out[237]: (4,)
আকৃতি পরিবর্তন করলে গতিও বদলে যায় - একসাথে বাফার 4 বাইটের মধ্য দিয়ে পদক্ষেপ নিন।
In [238]: x2=x1.copy()
In [239]: x2.strides
Out[239]: (12, 4)
যদিও x2দেখতে ঠিক তেমন লাগেx1 এটির নিজস্ব ডেটা বাফার রয়েছে, মানগুলি ভিন্ন ক্রমে। পরবর্তী কলামটি এখন 4 বাইট শেষ, যখন পরের সারিটি 12 (3 * 4)।
In [240]: x2.shape=(12,)
In [241]: x2.strides
Out[241]: (4,)
এবং হিসাবে x , আকৃতিটি 1 ডি তে পরিবর্তন করলে ধাপগুলি হ্রাস হয় (4,)।
জন্য x1 , ইন তথ্য দিয়ে 0,1,2,...অর্ডার, একটি 1d দীর্ঘ তা দিতে হবে নয় 0,4,8...।
__array_interface__ অ্যারে তথ্য প্রদর্শনের আর একটি দরকারী উপায়:
In [242]: x1.__array_interface__
Out[242]:
{'strides': (4, 16),
'typestr': '<i4',
'shape': (4, 3),
'version': 3,
'data': (163336056, False),
'descr': [('', '<i4')]}
দ্য x1তথ্য বাফার ঠিকানার জন্য একই হবে যেমন x, যা দিয়ে ডাটা শেয়ার। x2একটি ভিন্ন বাফার ঠিকানা আছে।
আপনি কমান্ড এবং কমান্ডগুলিতে একটি order='F'পরামিতি যুক্ত করার জন্যও পরীক্ষা করতে পারেন ।copyreshape