পাইথনে '@ =' প্রতীকটি কী?


173

আমি জানি @যে সাজসজ্জার জন্য, কিন্তু @=পাইথনে কী? এটি কি কেবল ভবিষ্যতের কিছু ধারণার জন্য সংরক্ষণ?

এটি পড়ার সময় আমার অনেক প্রশ্নের মধ্যে একটি tokenizer.py।


1
সিপিথন রেপোতে cset3353d8f72d65 ( গিটহাব আয়না ... পড়তে সহজ ) দেখুন।
— নিক টি

সিম্বলহাউন্ড একটি অনুসন্ধান ইঞ্জিন যা বিরাম চিহ্নগুলিতে অনুসন্ধান করতে পারে। তবে @ = পাইথনে অনুসন্ধান করা বর্তমানে প্রাসঙ্গিক ফলাফল দেয় না, কারণ পাইথন ৩.৩ নথিতে '@' রয়েছে তবে '@ =' এর কোনও উদাহরণ নেই। আমি উন্নতি করতে সহায়তার জন্য একটি বার্তা প্রেরণ করেছি। পাইথন ডকটিও উন্নতি করতে পারে।
— স্মি

1
পাইথনের ৩.৮ এর := ওয়ালরাস অপারেটরের সাথে একত্রিত হয়ে আপনি @:=কাঁটাযুক্ত গোলাপ অপারেটর হিসাবে পরিচিত what's (বা জাপানে এটি এলভিস-ওয়ালরাস অপারেটর হিসাবে পরিচিত))
— বব স্টেইন

উত্তর:


185

থেকে ডকুমেন্টেশন :

@(এ) অপারেটর ম্যাট্রিক্স গুণ জন্য ব্যবহার করা যেতে উদ্দেশ্যে। পাইথনের কোনও বিল্টিন এই অপারেটরটি প্রয়োগ করে না।

@অপারেটর পাইথন 3.5 চালু করা হয়। @=অ্যাসাইনমেন্টের পরে ম্যাট্রিক্সের গুণ হ'ল, যেমনটি আপনি আশা করবেন would তারা ম্যাপ __matmul__, __rmatmul__বা __imatmul__কিভাবে অনুরূপ +এবং +=ম্যাপ __add__, __radd__বা __iadd__।

অপারেটর এবং এর পিছনে যুক্তিগুলি পিইপি 465- তে বিস্তারিত আলোচনা করা হয়েছে ।


12
এটি ব্যাখ্যা করে যে এটি টোকেনাইজার.পি এর সর্বশেষতম সংস্করণে তবে 3.4 ডক্সে নয়।
— অষ্টাভিয়া টোগামি


পাইথন সাজসজ্জারের সাথে কি এর বিরোধ রয়েছে? এটি পাইথন ২.n তে প্রয়োগ করা হয়নি, তাই না?
— ফ্র্যাঙ্কলিওও

4
এটি সাজসজ্জার দ্বন্দ্ব করে না, কারণ সাজসজ্জার আগে কখনও কোনও এক্সপ্রেশন হয় না এবং বাইনারি অপারেটরগুলি অবশ্যই সর্বদা অভিব্যক্তির আগে হওয়া উচিত।
— রাইটফোল্ড

58

@=এবং @পাইথন 3.5 তে নতুন অপারেটরগুলি মেট্রিক্স গুণমান সম্পাদন করছে । এগুলি বোঝানো হয়েছে যে অপারেটরের সাথে এখনও পর্যন্ত বিদ্যমান বিভ্রান্তি স্পষ্ট করে দেওয়া হয়েছে যা *সেই নির্দিষ্ট লাইব্রেরি / কোডটিতে নিযুক্ত কনভেনশনের উপর ভিত্তি করে উপাদান অনুসারে গুণ বা ম্যাট্রিক্স গুণনের জন্য ব্যবহৃত হয়েছিল। ফলস্বরূপ, ভবিষ্যতে, অপারেটরটি *কেবলমাত্র উপাদান-ভিত্তিক গুণণের জন্য ব্যবহৃত হয়।

PEP0465-তে ব্যাখ্যা হিসাবে , দুটি অপারেটর চালু করা হয়েছিল:

  • A @ Bএকইভাবে ব্যবহৃত একটি নতুন বাইনারি অপারেটরA * B
  • A @= Bএকই জায়গায় ব্যবহৃত একটি ইন-প্লেস সংস্করণA *= B

ম্যাট্রিক্স গুণন বনাম উপাদান-গুণিত গুণ

দুটি ম্যাট্রিকের জন্য দ্রুত পার্থক্যটি হাইলাইট করতে:

A = [[1, 2],    B = [[11, 12],
     [3, 4]]         [13, 14]]
  • উপাদান-ভিত্তিক গুণফল ফলবে:

    A * B = [[1 * 11,   2 * 12], 
             [3 * 13,   4 * 14]]
  • ম্যাট্রিক্সের গুণটি ফল দেবে:

    A @ B  =  [[1 * 11 + 2 * 13,   1 * 12 + 2 * 14],
               [3 * 11 + 4 * 13,   3 * 12 + 4 * 14]]

নম্পি ব্যবহার

এখনও অবধি, নম্পি নিম্নলিখিত সম্মেলনটি ব্যবহার করেছেন:

  • *অপারেটর (এবং গাণিতিক অপারেটর সাধারণভাবে) এ উপাদান-অনুযায়ী অপারেশন হিসাবে সংজ্ঞায়িত করা হয় ndarrays এবং এর ম্যাট্রিক্স-গুণ যেমন numpy.matrix প্রকার।

  • পদ্ধতি / ফাংশন dot ন্যাডেরাইয়ের ম্যাট্রিক্স গুণনের জন্য ব্যবহৃত হয়েছিল

@অপারেটরের পরিচিতি ম্যাট্রিক্সের গুণগুলি পড়ার পক্ষে কোডকে আরও সহজ করে তোলে। PEP0465 আমাদের একটি উদাহরণ দেয়:

# Current implementation of matrix multiplications using dot function
S = np.dot((np.dot(H, beta) - r).T,
            np.dot(inv(np.dot(np.dot(H, V), H.T)), np.dot(H, beta) - r))

# Current implementation of matrix multiplications using dot method
S = (H.dot(beta) - r).T.dot(inv(H.dot(V).dot(H.T))).dot(H.dot(beta) - r)

# Using the @ operator instead
S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)

স্পষ্টতই, শেষের প্রয়োগটি সমীকরণ হিসাবে পড়া এবং ব্যাখ্যা করা অনেক সহজ।


11
কেবল স্পষ্টতার জন্য: আপনার প্রথম উদাহরণ থেকে, আমরা ভাবতে পারি যে @এটি কার্যকর করা হয়েছে list, যা এটি নয়।
— কনচিলেক্ল্যাটার

1
@এর সাথে জড়িত np.matmul, নেই np.dot। দুটি একই তবে একই নয় not
— একিউম্যানাস

@ এ বি বি, সম্ভবত আপনি একটি সংজ্ঞাটি ব্যাখ্যা করে উত্তরটি সম্পূর্ণরূপে নিশ্চিত করে দিতে পারবেন?
— বেনজামিনগ্রগ্রস

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.