'এবং' (বুলিয়ান) বনাম 'ও' (বিটওয়াইস) - বনাম নমপি অ্যারে তালিকার সাথে আচরণের মধ্যে পার্থক্য কেন?


142

NumPy অ্যারে বনাম বুলিয়ান এবং বিটওয়াইজ অপারেশনের আচরণের পার্থক্যের ব্যাখ্যা কী?

পাইথনে &বনামের উপযুক্ত ব্যবহার সম্পর্কে আমি বিভ্রান্ত and, নিম্নলিখিত উদাহরণগুলিতে চিত্রিত।

mylist1 = [True,  True,  True, False,  True]
mylist2 = [False, True, False,  True, False]

>>> len(mylist1) == len(mylist2)
True

# ---- Example 1 ----
>>> mylist1 and mylist2
[False, True, False, True, False]
# I would have expected [False, True, False, False, False]

# ---- Example 2 ----
>>> mylist1 & mylist2
TypeError: unsupported operand type(s) for &: 'list' and 'list'
# Why not just like example 1?

>>> import numpy as np

# ---- Example 3 ----
>>> np.array(mylist1) and np.array(mylist2)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
# Why not just like Example 4?

# ---- Example 4 ----
>>> np.array(mylist1) & np.array(mylist2)
array([False,  True, False, False, False], dtype=bool)
# This is the output I was expecting!

এই উত্তরটি এবং এই উত্তরটি আমাকে বুঝতে সাহায্য করেছে যে andএটি একটি বুলিয়ান অপারেশন তবে &কিছুটা দিকের অপারেশন।

আমি ধারণাটি আরও ভালভাবে বুঝতে বিটওয়াইজ অপারেশন সম্পর্কে পড়েছি , তবে আমি আমার উপরের 4 টি উদাহরণকে বোঝার জন্য সেই তথ্যটি ব্যবহার করতে লড়াই করছি।

উদাহরণ 4 আমাকে আমার পছন্দসই আউটপুটে নিয়ে গেছে, সুতরাং এটি ঠিক আছে তবে কখন / কেন / কেন আমাকে andবনাম ব্যবহার করা উচিত তা নিয়ে আমি এখনও বিভ্রান্ত &। তালিকাগুলি এবং নুমপি অ্যারে এই অপারেটরগুলির সাথে আলাদা আচরণ করে কেন?

বুলিয়ান এবং বিটওয়াইজ অপারেশনের মধ্যে পার্থক্য বুঝতে কেউ কীভাবে আমাকে তালিকা এবং নুমপি অ্যারে আলাদাভাবে পরিচালনা করে তা বোঝাতে সহায়তা করতে পারে?


2
Numpy ইন আছে np.bitwise_and()এবং np.logical_and()এবং বন্ধুদের বিভ্রান্তির এড়ানো।
ডায়েটারিচ

1
উদাহরণস্বরূপ 1, mylist1 and mylist2একই ফলাফল আউটপুট দেয় না mylist2 and mylist1, যেহেতু যা ফিরিয়ে দেওয়া হচ্ছে তা দ্বিতীয় তালিকা দেলানান দ্বারা নির্দেশিত হিসাবে।
ব্যবহারকারী2015487

উত্তর:


113

andকিনা উভয় এক্সপ্রেশন পরীক্ষা কথাটি দ্বারা Trueযখন &(যখন সঙ্গে ব্যবহার True/ Falseমান) পরীক্ষার হলে উভয় True

পাইথনে, খালি বিল্ট-ইন অবজেক্টগুলি সাধারণত যৌক্তিক হিসাবে বিবেচনা করা হয় Falseতবে খালি খালি বিল্ট-ইনগুলি যৌক্তিকভাবে করা হয় True। এটি সাধারণ ব্যবহারের ক্ষেত্রে সুবিধার্থে যেখানে তালিকা খালি থাকলে আপনি কিছু করতে চান এবং তালিকাটি যদি তা না থাকে। মনে রাখবেন এর অর্থ এই যে [তালিকাটি বাতিল (মিথ্যা)] যৌক্তিকভাবে করা হয়েছে True:

>>> if [False]:
...    print 'True'
...
True

উদাহরণস্বরূপ 1 এ, প্রথম তালিকাটি খালি নয় এবং তাই যুক্তিযুক্তভাবে True, সুতরাং এর সত্য মানটি andদ্বিতীয় তালিকার মতো। (আমাদের ক্ষেত্রে, দ্বিতীয় তালিকাটি খালি নয় এবং সুতরাং যুক্তিযুক্তভাবে True, তবে এটি সনাক্তকরণের জন্য গণনার অপ্রয়োজনীয় পদক্ষেপের প্রয়োজন হবে))

উদাহরণস্বরূপ 2, তালিকাগুলিকে অর্থপূর্ণভাবে বিটওয়াইজ ফ্যাশনে সংযুক্ত করা যাবে না কারণ এগুলিতে উপাদানগুলির বিপরীতে ইচ্ছামত থাকতে পারে। বিটওয়াইজের সাথে সংযুক্ত হওয়া জিনিসগুলির মধ্যে রয়েছে: ট্রুস এবং ফলস, পূর্ণসংখ্যা।

বিপরীতে, NumPy অবজেক্টগুলি ভেক্টরাইজড গণনাগুলি সমর্থন করে। এটি হ'ল তারা আপনাকে একাধিক ডেটা টুকরাতে একই ক্রিয়াকলাপ করতে দেয়।

উদাহরণ 3 ব্যর্থ হয়েছে কারণ NumPy অ্যারেগুলির (দৈর্ঘ্যের> 1) এর কোনও সত্যের মান নেই কারণ এটি ভেক্টর-ভিত্তিক যুক্তির বিভ্রান্তি রোধ করে।

উদাহরণ 4 কেবল একটি ভেক্টরাইজ বিট andঅপারেশন।

শেষের সারি

  • আপনি যদি অ্যারে নিয়ে কাজ করছেন না এবং পূর্ণসংখ্যার গণিতের হেরফের করছেন না, আপনি সম্ভবত এটি চান and

  • আপনি সত্য মূল্যবোধের ভেক্টর যদি আপনি একত্রিত করতে, ব্যবহার ইচ্ছুক numpyসঙ্গে &


26

সম্পর্কিত list

প্রথমে একটি খুব গুরুত্বপূর্ণ বিষয়, যা থেকে সমস্ত কিছুই অনুসরণ করবে (আমি আশা করি)।

সাধারণ পাইথন কোনওভাবেই listবিশেষ নয় (নির্মাণের জন্য সুন্দর সিনট্যাক্স ব্যতীত, যা বেশিরভাগ aতিহাসিক দুর্ঘটনা। একবার একটি তালিকা [3,2,6]তৈরি হয়ে গেলে , এটি সমস্ত উদ্দেশ্য এবং উদ্দেশ্যে কেবল একটি সাধারণ পাইথন অবজেক্টের মতো একটি সংখ্যা 3, সেট {3,7}বা কোনও ফাংশন lambda x: x+5

(হ্যাঁ, এটি এর উপাদানগুলি পরিবর্তন করে, এবং এটি পুনরাবৃত্তি এবং অন্যান্য অনেকগুলি বিষয়কে সমর্থন করে, তবে এটি কেবল এক প্রকার: এটি কিছু অপারেশন সমর্থন করে, অন্য কিছুকে সমর্থন করে না int এটিকে খুব বিশেষ করে তোলেন - এটি কেবল একটি অন্তর্নিহিত জিনিস la ল্যাম্বদা কলিং সমর্থন করে তবে এটি খুব বিশেষ করে না - ল্যাম্বদা এর পরে যা আছে তা :)।

সম্পর্কিত and

andঅপারেটর নয় (আপনি এটিকে "অপারেটর" বলতে পারেন, তবে আপনি "অপারেটরকে" "কল করতেও পারেন :)"। পাইথনের অপারেটরগুলি (এর মাধ্যমে প্রয়োগ করা হয়) কোনও ধরণের অবজেক্টগুলিতে ডাকা পদ্ধতি হয় (সাধারণত প্রয়োগ করা হয়) সেই ধরণের অংশ হিসাবে। কোনও পদ্ধতির কিছু ক্রিয়াকলাপের মূল্যায়ন করার উপায় নেই তবে andএটি (এবং অবশ্যই) তা করতে পারে।

এর পরিণতি হ'ল andওভারলোড করা যায় না, ঠিক তেমনি ওভারলোডও করা forযায় না। এটি সম্পূর্ণ সাধারণ, এবং একটি নির্দিষ্ট প্রোটোকলের মাধ্যমে যোগাযোগ করে। আপনি যা করতে পারেন তা হ'ল আপনার প্রোটোকলের অংশটি কাস্টমাইজ করা, তবে এর অর্থ এই নয় যে আপনি andসম্পূর্ণরূপে আচরণ পরিবর্তন করতে পারেন । প্রোটোকলটি হ'ল:

কল্পনা করুন পাইথন "ক এবং খ" এর ব্যাখ্যা করছেন (এটি আক্ষরিকভাবে এভাবে হয় না, তবে এটি বুঝতে সহায়তা করে)। যখন এটি "এবং" এ আসে, তখন এটি সবেমাত্র (ক) মূল্যায়ন করা বস্তুর দিকে নজর দেয় এবং জিজ্ঞাসা করে: আপনি সত্য? ( নয় : আপনি True?) আপনি যদি কোনও শ্রেণীর লেখক হন তবে আপনি এই উত্তরটি অনুকূলিত করতে পারেন। যদি aউত্তরগুলি "না", and(পুরোপুরি এড়িয়ে যায়, এটি মোটেই মূল্যায়ন করা হয় না, এবং) বলে: aআমার ফলাফল ( নয় : মিথ্যা আমার ফলাফল))

যদি aউত্তর না দেয় তবে andজিজ্ঞাসা করুন: আপনার দৈর্ঘ্য কত? (আবার, আপনি aএটির শ্রেণীর লেখক হিসাবে কাস্টমাইজ করতে পারেন )। যদি a0 এর উত্তর andথাকে তবে উপরের মতোটিও - এটি মিথ্যা (মিথ্যা নয় ) হিসাবে বিবেচনা করে , খ উপেক্ষা aকরে, ফলস্বরূপ দেয় ।

তাহলে aউত্তর কিছু দ্বিতীয় প্রশ্ন 0 ছাড়া অন্য ( "তোমার দৈর্ঘ্য হল"), অথবা এটি এ সব জবাব দিতে পারে নি, অথবা এটি "হ্যাঁ" প্রথম এক ( "আপনি সত্য") এ উত্তর দেন, andখ মূল্যায়ণ এবং বলেছেন: bআমার ফলাফল। মনে রাখবেন এটি কোনও প্রশ্ন জিজ্ঞাসা করে নাb

এই সমস্ত বলার অন্য a and bউপায়টি হ'ল প্রায় একই রকম b if a else a, ব্যতীত কেবল একবার মূল্যায়ন করা হয়।

এখন একটি পেন এবং কাগজ নিয়ে কয়েক মিনিটের জন্য বসে থাকুন এবং নিজেকে বোঝান যে যখন {a, b {যখন {সত্য, মিথ্যা of এর উপসেট হয়, এটি বুলিয়ান অপারেটরদের প্রত্যাশা মতো ঠিক কাজ করে। তবে আমি আশা করি যে আমি আপনাকে নিশ্চিত করেছি যে এটি আরও সাধারণ, এবং আপনি যেমন দেখবেন, এইভাবে আরও অনেক দরকারী।

দুজনকে একসাথে রেখেছি

এখন আমি আশা করি আপনি নিজের উদাহরণটি 1 টি বুঝতে পেরেছেন andmy mylist1 একটি সংখ্যা, তালিকা, ল্যাম্বদা বা কোনও শ্রেণি Argmhbl এর অবজেক্ট কিনা তা বিবেচ্য নয়। এটি কেবল মাইলিস্ট 1 এর প্রোটোকলের প্রশ্নের উত্তর সম্পর্কে যত্নশীল। এবং অবশ্যই, মাইলিস্ট 1 দৈর্ঘ্য সম্পর্কে প্রশ্নের 5 টি উত্তর দেয়, তাই মাইলিস্ট 2 প্রদান করে। এবং এটাই. এটি আমার মাইলিস্ট 1 এবং মাইলিস্ট 2 এর উপাদানগুলির সাথে কিছুই করার নেই - তারা ছবিটি কোথাও প্রবেশ করে না।

দ্বিতীয় উদাহরণ: &চালুlist

অন্যদিকে &, +উদাহরণস্বরূপ , অন্য যে কোনও অপারেটর । এই শ্রেণীর একটি বিশেষ পদ্ধতি নির্ধারণ করে এটি কোনও ধরণের জন্য সংজ্ঞায়িত করা যেতে পারে। intএটিকে বিটওয়াইজ হিসাবে "এবং" হিসাবে সংজ্ঞায়িত করা হয়েছে, এবং বুল এটিকে যৌক্তিক "এবং" হিসাবে সংজ্ঞায়িত করেছে, তবে এটি কেবল একটি বিকল্প: উদাহরণস্বরূপ, সেট এবং ডিক কী মতামতের মতো কিছু অন্যান্য বিষয় সেট সেটাকে ছেদ করে হিসাবে সংজ্ঞায়িত করে। listকেবল এটি সংজ্ঞায়িত করা হয়নি, সম্ভবত কারণ গুডো এটি সংজ্ঞায়িত করার কোনও সুস্পষ্ট উপায় সম্পর্কে ভাবেনি।

numpy

অন্যান্য লেগ অন: -D, numpy অ্যারে হয় বিশেষ, বা অন্তত তারা হতে চেষ্টা করছেন। অবশ্যই, numpy.array কেবল একটি শ্রেণি, এটি কোনওভাবেই ওভাররাইড করতে পারে না and, তাই এটি পরবর্তী সর্বোত্তম কাজটি করে: যখন "আপনি সত্য হন" জিজ্ঞাসা করা হয়, numpy.array কার্যকরভাবে "দয়া করে প্রশ্নটি পুনরায় বলুন," বলে একটি মান উত্থাপন করে সত্যের দর্শন আপনার মডেলের সাথে খাপ খায় না। (নোট করুন যে ভ্যালুআরারের বার্তাটি কথা বলছে না and- কারণ numpy.array জানেন না কে এটিকে প্রশ্ন জিজ্ঞাসা করছে; এটি কেবল সত্যের কথা বলে))

কারণ &এটি সম্পূর্ণ ভিন্ন গল্প। numpy.array ইচ্ছামতো এটি সংজ্ঞায়িত করতে পারে এবং এটি &অন্যান্য অপারেটরগুলির সাথে ধারাবাহিকভাবে সংজ্ঞা দেয় : পয়েন্টওয়াইসওয়্যার। সুতরাং আপনি অবশেষে যা চান তা পাবেন।

আছে HTH,


23

শর্ট সার্কিটিং বুলিয়ান অপারেটরগুলি ( and, or) ওভাররাইড করা যায় না কারণ নতুন ভাষার বৈশিষ্ট্যগুলি প্রবর্তন করা বা শর্ট সার্কিটের ত্যাগ ছাড়াই এটি করার কোনও সন্তোষজনক উপায় নেই। আপনি যেমন জানেন বা নাও জানেন, তারা এর সত্য মানের জন্য প্রথম অপারেন্ডকে মূল্যায়ন করে এবং সেই মানের উপর নির্ভর করে হয় হয় দ্বিতীয় যুক্তির মূল্যায়ন ও প্রত্যাবর্তন, অথবা দ্বিতীয় যুক্তিটি মূল্যায়ন না করে এবং প্রথমটি ফেরৎ:

something_true and x -> x
something_false and x -> something_false
something_true or x -> something_true
something_false or x -> x

মনে রাখবেন যে (সত্যায়নের অপারেন্ডটি মূল্যায়নের ফলাফল) ফিরে আসে, সত্যের মান নয় value

তাদের আচরণটি কাস্টমাইজ করার একমাত্র উপায় হ'ল ওভাররাইড __nonzero__( __bool__পাইথন 3 এ নতুন নাম দেওয়া হয়েছে), যাতে আপনি কোন অপারেন্ড ফিরে আসেন তা প্রভাবিত করতে পারেন, তবে ভিন্ন কিছু ফিরে না। তালিকাগুলি (এবং অন্যান্য সংগ্রহগুলি) "সত্যবাদী" হিসাবে সংজ্ঞায়িত করা হয় যখন এগুলিতে কিছু থাকে না এবং খালি হলে "মিথ্যা" থাকে।

নুমপি অ্যারেগুলি এই ধারণাটিকে প্রত্যাখ্যান করে: তাদের লক্ষ্য হিসাবে ব্যবহারের ক্ষেত্রে সত্যের দুটি ভিন্ন ধারণা প্রচলিত: (1) কোনও উপাদান সত্য কিনা এবং (২) সমস্ত উপাদান সত্য কিনা। এই দুটি সম্পূর্ণরূপে (এবং চুপটি) বেমানান, এবং কেউই পরিষ্কারভাবে আরো সঠিক বা বেশি দেখা যায় সাল থেকে, NumPy অনুমান করতে রাজি এবং আপনি স্পষ্টভাবে ব্যবহারের প্রয়োজন হয় .any()বা .all()

&এবং |(এবং not, উপায় দ্বারা) পুরোপুরি ওভাররাইড করা যেতে পারে, কারণ তারা শর্ট সার্কিট নয়। ওভাররাইড করার সময় এগুলি কিছুতেই ফিরে আসতে পারে এবং নিম্পি উপাদান-ভিত্তিক অপারেশনগুলি ব্যবহারিক প্রয়োগ করার জন্য এটির যথাযথ ব্যবহার করে, কারণ তারা ব্যবহারিকভাবে অন্য কোনও স্কেলার অপারেশন করে। অন্যদিকে তালিকাগুলি তাদের উপাদানগুলিতে অপারেশন সম্প্রচার করবেন না। ঠিক যেমন mylist1 - mylist2কোনও কিছুই বোঝায় না এবং mylist1 + mylist2অর্থ সম্পূর্ণ আলাদা কিছু হয়, তেমনি &তালিকার জন্য কোনও অপারেটর নেই ।


3
এটি কী উত্পাদন করতে পারে তার একটি বিশেষ আকর্ষণীয় উদাহরণ হ'ল [False] or [True]মূল্যায়ন [False], এবং [False] and [True]মূল্যায়ন [True]
রব ওয়াটস

16

উদাহরণ 1:

এই হল কিভাবে এবং অপারেটর কাজ করে।

x এবং y => যদি x মিথ্যা হয় তবে x , অন্য y

সুতরাং অন্য কথায়, যেহেতু mylist1হয় না False, প্রকাশের ফলাফল হয় mylist2। (কেবল খালি তালিকাগুলি মূল্যায়ন করে False))

উদাহরণ 2:

&হিসাবে আপনি উল্লেখ অপারেটর একটি bitwise জন্য এবং। বিটওয়াইজ অপারেশনগুলি কেবল সংখ্যায় কাজ করে। ফলে একটি & বিট উভয় জনের মধ্যে 1 জন হয় 1s গঠিত একটি সংখ্যা একটি এবং । উদাহরণ স্বরূপ:

>>> 3 & 1
1

বাইনারি আক্ষরিক (উপরের মতো একই সংখ্যা) ব্যবহার করে কী ঘটছে তা দেখতে আরও সহজ :

>>> 0b0011 & 0b0001
0b0001

বিটওয়াইজ অপারেশনগুলি বুলিয়ান (ট্রুথ) অপারেশনগুলির ধারণায় একই রকম, তবে তারা কেবল বিটগুলিতে কাজ করে।

সুতরাং, আমার গাড়ী সম্পর্কে একটি দম্পতি বিবৃতি দেওয়া

  1. আমার গাড়ি লাল
  2. আমার গাড়িতে চাকা রয়েছে

এই দুটি বিবৃতিটির যৌক্তিক "এবং" হ'ল:

(আমার গাড়ি কি লাল?) এবং (গাড়িতে কি চাকা রয়েছে?) => মিথ্যা মানটির যৌক্তিক সত্য

উভয়ই সত্য, আমার গাড়ী কমপক্ষে। সুতরাং সামগ্রিকভাবে বিবৃতিটির মানটি যৌক্তিকভাবে সত্য।

এই দুটি বিবৃতিটির বিটওয়াইজ "এবং" কিছুটা দুর্বল:

('আমার গাড়িটি লাল' এই বিবৃতিটির সংখ্যাসূচক মান) এবং ('আমার গাড়িতে চাকা রয়েছে' বিবৃতিটির সংখ্যাসূচক মান) => সংখ্যা

যদি পাইথন জানে যে কীভাবে বিবৃতিগুলিকে সংখ্যাসূচক মানগুলিতে রূপান্তর করতে হয়, তবে এটি এমনটি করবে এবং বিটওয়াইস-এবং দুটি মানকে গণনা করবে। এটি আপনাকে বিশ্বাস করতে পারে যে এটির &সাথে বিনিময়যোগ্য andতবে উপরের উদাহরণের মতো এগুলি বিভিন্ন জিনিস। এছাড়াও, যে জিনিসগুলিকে রূপান্তর করা যায় না তাদের জন্য আপনি কেবল একটি পাবেন TypeError

3 এবং 4 উদাহরণ:

নম্পি অ্যারেগুলির জন্য পাটিগণিত অপারেশনগুলি প্রয়োগ করে:

নাদারেরে গাণিতিক এবং তুলনামূলক ক্রিয়াকলাপগুলি উপাদান-ভিত্তিক ক্রিয়াকলাপ হিসাবে সংজ্ঞায়িত করা হয় এবং ফলস্বরূপ সাধারণত নাদার্রে বস্তু পাওয়া যায়।

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

সুতরাং আপনার andবনাম &প্রশ্নের উত্তর দিতে : ব্যবহার করুন and

বিটওয়াইজ অপারেশনগুলি কোনও সংখ্যার কাঠামো পরীক্ষা করার জন্য ব্যবহৃত হয় (কোন বিট সেট করা হয়, কোন বিট সেট করা হয়নি)। এই ধরণের তথ্য বেশিরভাগ নিম্ন-স্তরের অপারেটিং সিস্টেম ইন্টারফেসে ব্যবহৃত হয় ( ইউনিক্স অনুমতি বিট , উদাহরণস্বরূপ)। বেশিরভাগ অজগর প্রোগ্রামের এটি জানতে হবে না।

লজিক্যাল অপারেশন ( and, or, not) তবে, সব সময় ব্যবহার করা হয়।


14
  1. পাইথন সালে একটি অভিব্যক্তি X and Yআয় Yদেওয়া যে bool(X) == Trueবা কোন Xবা Yমিথ্যা, যেমন মূল্যায়ন:

    True and 20 
    >>> 20
    
    False and 20
    >>> False
    
    20 and []
    >>> []
  2. বিটওয়াস অপারেটর কেবল তালিকাগুলির জন্য সংজ্ঞায়িত হয় না। তবে এটি সংখ্যার বাইনারি উপস্থাপনার জন্য অপারেটিং - সংখ্যার জন্য সংজ্ঞায়িত। 16 (01000) এবং 31 (11111) বিবেচনা করুন:

    16 & 31
    >>> 16
  3. NumPy একটি মনস্তাত্ত্বিক নয়, এটি জানে না, আপনি বোঝাতে চাইছেন যে লজিক্যাল এক্সপ্রেশনতে যেমন [False, False]সমান হওয়া উচিত True। "সঙ্গে কোন খালি সংগ্রহ: এই এটা একটি প্রমিত পাইথন আচরণ, যা অগ্রাহ্য len(collection) == 0হয় False"।

  4. সম্ভবত NumPy এর অ্যারে এবং অপারেটরের একটি প্রত্যাশিত আচরণ।


মিথ্যা এবং 20 ফিরিয়ে দেয় মিথ্যা
রাহুল

4

জ্যাঙ্গোর ডকের প্রথম উদাহরণ এবং ভিত্তির জন্য এটি
সর্বদা দ্বিতীয় তালিকাটি ফিরে আসবে, সত্যিকার অর্থে একটি খালি তালিকা নয়, পাইথনের সত্য মান হিসাবে এইভাবে পাইথন 'শেষ' সত্য মানটি ফিরে আসে তাই দ্বিতীয় তালিকা

In [74]: mylist1 = [False]
In [75]: mylist2 = [False, True, False,  True, False]
In [76]: mylist1 and mylist2
Out[76]: [False, True, False, True, False]
In [77]: mylist2 and mylist1
Out[77]: [False]

4

একটি পাইথন তালিকা সঙ্গে অপারেশনস কাজ তালিকা । খালি আছে list1 and list2কিনা list1তা যাচাই করবে এবং list1এটি থাকলে ফিরে আসবে এবং list2তা না হলে। list1 + list2এতে যুক্ত list2হবে list1, সুতরাং আপনি len(list1) + len(list2)উপাদানগুলির সাথে একটি নতুন তালিকা পাবেন ।

অপারেটররা কেবলমাত্র উপাদান হিসাবে প্রয়োগ করা হয়, যেমন &একটি উত্থাপিত করার সময় কেবল তাত্পর্যপূর্ণ হয় TypeError, কারণ উপাদান-ভিত্তিক ক্রিয়াকলাপগুলি উপাদানগুলির মধ্যে লুপিং ব্যতীত সমর্থনযোগ্য নয়।

নম্পি অ্যারে উপাদান অনুযায়ী অপারেশনগুলিকে সমর্থন করে। array1 & array2প্রতিটি সংশ্লিষ্ট উপাদানের জন্য, bitwise নিরূপণ বা হবে array1এবং array2array1 + array2প্রতিটি সংশ্লিষ্ট উপাদানের জন্য সমষ্টি নিরূপণ করবে array1এবং array2

এটি andএবং এর জন্য কাজ করে না or

array1 and array2 নিম্নলিখিত কোডের জন্য মূলত একটি সংক্ষিপ্ত হাত:

if bool(array1):
    return array2
else:
    return array1

এই জন্য আপনার একটি ভাল সংজ্ঞা প্রয়োজন bool(array1)। পাইথন তালিকাগুলির মতো বৈশ্বিক ক্রিয়াকলাপগুলির জন্য, সংজ্ঞাটি হ'ল bool(list) == Trueযদি listখালি না হয় এবং Falseযদি এটি খালি থাকে। স্তন্যপায়ীদের উপাদান অনুসারে পরিচালিত ক্রিয়াকলাপগুলির জন্য, কোনও উপাদান মূল্যায়ন করে কিনা Trueবা সমস্ত উপাদানকে মূল্যায়ন করে কিনা তা যাচাই করা উচিত কিনা তা সম্পর্কে কিছুটা অসঙ্গতি রয়েছে True। যেহেতু উভয়ই যুক্তিযুক্তভাবে সঠিক, নিম্পি অনুমান করে না এবং ValueErrorকখন bool()অ্যারেতে ডাকা হয় (পরোক্ষভাবে) উত্থাপন করে।


0

ভাল প্রশ্ন. লজিকাল andবিটওয়াইজ &অপারেটরগুলির উপর 1 এবং 4 উদাহরণগুলির (বা আমি 1 এবং 4 :) বলতে হবে) সম্পর্কে যে পর্যবেক্ষণের অনুরূপ , আমি sumঅপারেটরের উপর অভিজ্ঞতা অর্জন করেছি । অলস sumএবং পাই sumপাশাপাশি আলাদাভাবে আচরণ করে। উদাহরণ স্বরূপ:

ধরা যাক "মাদুর" হ'ল একটি নির্লিপ্ত 5x5 2 ডি অ্যারে যেমন:

array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15],
       [16, 17, 18, 19, 20],
       [21, 22, 23, 24, 25]])

তারপরে numpy.sum (মাদুর) পুরো ম্যাট্রিক্সের মোট যোগফল দেয়। পাইথন থেকে অন্তর্নির্মিত সমষ্টি যেমন যোগফল (মাদুর) অক্ষটি বরাবরই যোগফল। নিচে দেখ:

np.sum(mat)  ## --> gives 325
sum(mat)     ## --> gives array([55, 60, 65, 70, 75])
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.