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


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.