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'
পরামিতি যুক্ত করার জন্যও পরীক্ষা করতে পারেন ।copy
reshape