সহজ কথায়, বিদ্যমান অ্যারের মাত্রা আরও একবার মাত্রা বাড়িয়েnumpy.newaxis
ব্যবহার করা হয়, একবার ব্যবহার করা হলে । সুতরাং,
1D অ্যারে 2 ডি অ্যারে হয়ে যাবে
2D অ্যারে হয়ে যাবে 3D অ্যারে
3 ডি অ্যারে 4 ডি অ্যারে হয়ে যাবে
4 ডি অ্যারে 5 ডি অ্যারে হয়ে যাবে
ইত্যাদি
এখানে একটি চিত্তাকর্ষক চিত্রণ যা 2D অ্যারেতে 1D অ্যারে প্রচার করে promotion
পরিস্থিতি -১ : উপরের ছবিতে বর্ণিত হিসাবে np.newaxis
আপনি যখন স্পষ্টভাবে কোনও 1 ডি অ্যারেটিকে একটি সারি ভেক্টর বা কলাম ভেক্টরে রূপান্তর করতে চান তখন কার্যকর হতে পারে ।
উদাহরণ:
# 1D array
In [7]: arr = np.arange(4)
In [8]: arr.shape
Out[8]: (4,)
# make it as row vector by inserting an axis along first dimension
In [9]: row_vec = arr[np.newaxis, :] # arr[None, :]
In [10]: row_vec.shape
Out[10]: (1, 4)
# make it as column vector by inserting an axis along second dimension
In [11]: col_vec = arr[:, np.newaxis] # arr[:, None]
In [12]: col_vec.shape
Out[12]: (4, 1)
দৃশ্যপট-2 : আমরা ব্যবহার করতে চান, তখন numpy সম্প্রচার যখন করছেন উদাহরণস্বরূপ, কিছু অপারেশন অংশ হিসাবে উপরন্তু কিছু বিন্যাসের।
উদাহরণ:
ধরা যাক আপনি নিম্নলিখিত দুটি অ্যারে যুক্ত করতে চান:
x1 = np.array([1, 2, 3, 4, 5])
x2 = np.array([5, 4, 3])
আপনি যদি এটির মতো যুক্ত করার চেষ্টা করেন তবে নম্পপি নিম্নলিখিতগুলি উত্থাপন করবেন ValueError
:
ValueError: operands could not be broadcast together with shapes (5,) (3,)
এই পরিস্থিতিতে, আপনি np.newaxis
অ্যারেরগুলির একটিগুলির মাত্রা বাড়াতে ব্যবহার করতে পারেন যাতে নুমপি সম্প্রচার করতে পারে ।
In [2]: x1_new = x1[:, np.newaxis] # x1[:, None]
# now, the shape of x1_new is (5, 1)
# array([[1],
# [2],
# [3],
# [4],
# [5]])
এখন, যোগ করুন:
In [3]: x1_new + x2
Out[3]:
array([[ 6, 5, 4],
[ 7, 6, 5],
[ 8, 7, 6],
[ 9, 8, 7],
[10, 9, 8]])
বিকল্পভাবে, আপনি অ্যারেতে নতুন অক্ষ যুক্ত করতে পারেন x2
:
In [6]: x2_new = x2[:, np.newaxis] # x2[:, None]
In [7]: x2_new # shape is (3, 1)
Out[7]:
array([[5],
[4],
[3]])
এখন, যোগ করুন:
In [8]: x1 + x2_new
Out[8]:
array([[ 6, 7, 8, 9, 10],
[ 5, 6, 7, 8, 9],
[ 4, 5, 6, 7, 8]])
দ্রষ্টব্য : লক্ষ্য করুন যে আমরা উভয় ক্ষেত্রেই একই ফল পেয়েছি (তবে একটির অপরটির স্থানান্তর হ'ল)।
দৃশ্য -৩ : এটি দৃশ্য -১ এর মতো similar তবে, আপনি উচ্চতর মাত্রায় অ্যারে প্রচার করতে np.newaxis
একাধিকবার ব্যবহার করতে পারেন । উচ্চতর অর্ডার অ্যারেগুলির জন্য ( যেমন টেনার্স ) কখনও কখনও এ জাতীয় একটি অপারেশন প্রয়োজন ।
উদাহরণ:
In [124]: arr = np.arange(5*5).reshape(5,5)
In [125]: arr.shape
Out[125]: (5, 5)
# promoting 2D array to a 5D array
In [126]: arr_5D = arr[np.newaxis, ..., np.newaxis, np.newaxis] # arr[None, ..., None, None]
In [127]: arr_5D.shape
Out[127]: (1, 5, 5, 1, 1)
Np.newaxis বনাম np.reshape এর আরও পটভূমি
newaxis
এটি ছদ্ম-সূচক হিসাবেও ডাকা হয় যা অক্ষকে অবিচ্ছিন্নভাবে একটি মাল্টিয়ারে যুক্ত করতে দেয়।
np.newaxis
অ্যারে পুনঃ যখন slicing অপারেটর ব্যবহার np.reshape
(; আর এই হল অভিমানী যে মাত্রা মেলে reshapes আকাঙ্ক্ষিত লেআউটে অ্যারের আবশ্যক একটি জন্য reshape
ঘটতে)।
উদাহরণ
In [13]: A = np.ones((3,4,5,6))
In [14]: B = np.ones((4,6))
In [15]: (A + B[:, np.newaxis, :]).shape # B[:, None, :]
Out[15]: (3, 4, 5, 6)
উপরের উদাহরণে, আমরা প্রথম এবং দ্বিতীয় অক্ষের মধ্যে B
(সম্প্রচার ব্যবহার করার জন্য) একটি অস্থায়ী অক্ষ প্রবেশ করিয়ে দিয়েছিলাম। সম্প্রচারের কাজ চালিয়ে np.newaxis
যাওয়ার জন্য এখানে একটি অনুপস্থিত অক্ষ পূরণ করা হয়েছে ।
সাধারণ টিপ : আপনি ব্যবহার করতে পারেনNone
স্থানেnp.newaxis
; এই আসলে হয় একই বস্তু ।
In [13]: np.newaxis is None
Out[13]: True
পিএস এছাড়াও এই দুর্দান্ত উত্তরটি দেখুন: নিউজাক্সিস বনাম পুনরায় আকার পরিবর্তন করুন add
except that it changes a row vector to a column vector?
প্রথম উদাহরণটি সারি ভেক্টর নয়। এটি একটি মতলব ধারণা। পাইথনে এটি কেবলমাত্র 1-মাত্রিক ভেক্টর যার কোনও সারি বা কলামের ধারণা নেই। সারি বা কলামের ভেক্টরগুলি 2-ডাইমেনসোনাল, দ্বিতীয় উদাহরণের মতো