সর্বাধিক ব্যবহৃত সি ++ ভেক্টর / ম্যাট্রিক্স গণিত / লিনিয়ার বীজগণিত গ্রন্থাগারগুলি এবং তাদের ব্যয় এবং উপকারের ট্রেড অফগুলি কী কী? [বন্ধ]


242

দেখে মনে হচ্ছে অনেকগুলি প্রকল্প ধীরে ধীরে ম্যাট্রিক্স গণিত করার প্রয়োজনে আসে এবং প্রথমে কিছু ভেক্টর ক্লাস তৈরির ফাঁদে পড়ে এবং আধা-অ্যাসেড কাস্টম লিনিয়ার বীজগণিত গ্রন্থাগারটি নির্মাণ না করা পর্যন্ত এবং ধীরে ধীরে কার্যকারিতা যুক্ত করে it

কিছু স্পর্শকাতরভাবে সম্পর্কিত লাইব্রেরির উপর নির্ভরশীলতা তৈরি না করার সময় আমি এড়াতে চাই (উদাঃ ওপেনসিভি, ওপেনসিনিগ্রাফ)।

সাধারণভাবে ব্যবহৃত ম্যাট্রিক্স গণিত / লিনিয়ার বীজগণিত গ্রন্থাগারগুলি কী আছে এবং কেন একে অপরকে ব্যবহারের সিদ্ধান্ত নেবে? এমন কোনও কি আছে যা কোনও কারণে ব্যবহার করার বিরুদ্ধে পরামর্শ দেওয়া হবে? আমি বিশেষত এটি একটি জ্যামিতিক / সময় প্রসঙ্গে * (2,3,4 ডিম) * ব্যবহার করছি তবে ভবিষ্যতে উচ্চতর মাত্রিক ডেটা ব্যবহার করছি।

আমি যে কোনওগুলির ক্ষেত্রে সম্মানের সাথে পার্থক্যগুলি খুঁজছি: এপিআই, গতি, মেমরির ব্যবহার, প্রস্থ / সম্পূর্ণতা, সংকীর্ণতা / নির্দিষ্টতা, এক্সটেনসিবিলিটি এবং / অথবা পরিপক্কতা / স্থিতিশীলতা।

হালনাগাদ

আমি ইগিজেন 3 ব্যবহার করে শেষ করেছি যার সাথে আমি অত্যন্ত খুশি।


2
যেহেতু আপনি ওএসজি এবং ওপেনসিভি উল্লেখ করেছেন, আমি অনুমান করছি যে আপনার কেবলমাত্র 3D গ্রাফিক্সের ধরণের ভেক্টর / ম্যাট্রিকেসের প্রয়োজন, যেমন: 3x3 এবং 4x4 ম্যাট্রিক্স। আমি আমার উত্তরটি ভিত্তি করে তৈরি করেছি, তবে আপনি ঠিক কীভাবে এটি ব্যবহার করছেন তা নির্দিষ্ট করে বলতে চাই - আপনার কী ম্যাট্রিক্স সমাধান দরকার? উচ্চ মাত্রিক ম্যাট্রিক্স গণিত? ইত্যাদি
রিড কোপসি

এই মুহুর্তে আমি কেবল 2 ডি জ্যামিতি ভিত্তিক স্টাফ করছি, তবে অনুমানকৃতভাবে কখনও কখনও 2D ডেটাতে আপনার 3x3 ক্রিয়াকলাপ প্রয়োজন হয় এবং 3 ডি তথ্য এইভাবে 4x4 অপারেশন প্রয়োজনীয় হতে পারে কিনা তা অস্পষ্ট। আমরা পুরো সংস্থা জুড়ে একটি সাধারণ গ্রন্থাগার ব্যবহার করতে চাই। ট্রেড অফ কী হবে তার জন্য আমার কোনও ভাল ধারণা নেই। আরও সাধারণ আরও ভাল হবে, তবে কোন দামে প্রশ্ন।
ক্যাটসকুল

1
যদি আপনি কেবল জ্যামিতিক ট্রান্সফর্মেশন করেন তবে আমি জিজিটি দেখার পরামর্শ দেব, যেমনটি আমি আমার উত্তরে উল্লেখ করেছি। এটি এর জন্য খুব সম্পূর্ণ, তবে এটি কিন্তু কিছুই করে না, সুতরাং এটি একটি খুব পরিষ্কার, সহজ বিকল্প। জ্যামিতিক রূপান্তর নয়, বৈজ্ঞানিক ও গণিতের জন্য ডাইগেন জটিল ম্যাট্রিক্স সমাধানের (যেমন: 50x50 ম্যাট্রিক্স, স্পারস ম্যাট্রিক্স ইত্যাদি) বিএলএলএস এবং ল্যাপাক আরও বেশি।
রিড কোপসি

উত্তর:


114

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

আমি এটি বেশ সুন্দর পেয়েছি - এটি টেমপ্লেটগুলির মাধ্যমে সমস্ত কিছু করে, তাই এটি খুব নমনীয় এবং খুব দ্রুত।


সম্পাদনা:

মন্তব্যগুলি আলোচনার পরে এবং সম্পাদনার পরে, আমি ভেবেছিলাম যে নির্দিষ্ট সুবিধাগুলির জন্য বেনিফিট এবং ডাউনসাইড সম্পর্কে আরও কিছু তথ্য ফেলে দেব এবং কেন আপনার পরিস্থিতি বিবেচনা করে আপনি একে অপরকে বেছে নিতে পারেন।

GMTL -

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

ডাউনসাইডস: এপিআই বিশেষভাবে রেন্ডারিং এবং গ্রাফিক্সের উপর খুব বেশি মনোযোগী। সাধারণ উদ্দেশ্য (এনএক্সএম) ম্যাট্রিক্স, ম্যাট্রিক্স পচন এবং সমাধান ইত্যাদি অন্তর্ভুক্ত করে না কারণ এগুলি traditionalতিহ্যগত গ্রাফিক্স / জ্যামিতি অ্যাপ্লিকেশনগুলির ক্ষেত্রের বাইরে।

ইগেন -

উপকারিতা: পরিষ্কার এপিআই , ব্যবহার করা মোটামুটি সহজ। কোয়াটার্ন এবং জ্যামিতিক ট্রান্সফর্ম সহ জ্যামিতি মডিউল অন্তর্ভুক্ত । ওভারহেড কম স্মৃতি। বৃহত্তর এনএক্সএন ম্যাট্রিক্স এবং অন্যান্য সাধারণ উদ্দেশ্যে গাণিতিক রুটিনগুলির সম্পূর্ণ, অত্যন্ত পারফরম্যান্ট সমাধান।

ডাউনসাইডস: আপনি চাইলে (?) চেয়ে কিছুটা বড় স্কোপ হতে পারে। GMTL (যেমন: Euler কোণ সংজ্ঞা ইত্যাদি) এর সাথে তুলনা করার সময় কম জ্যামিতিক / রেন্ডারিং নির্দিষ্ট রুটিনগুলি।

আইএমএসএল -

উপকারিতা: খুব সম্পূর্ণ সংখ্যাযুক্ত লাইব্রেরি। খুব, খুব দ্রুত (সম্ভবত দ্রুততম সমাধানকারী)। এখন পর্যন্ত বৃহত্তম, সবচেয়ে সম্পূর্ণ গাণিতিক এপিআই। বাণিজ্যিকভাবে সমর্থিত, পরিপক্ক এবং স্থিতিশীল।

ডাউনসাইডস: ব্যয় - সস্তা নয়। খুব কম জ্যামিতিক / রেন্ডারিং নির্দিষ্ট পদ্ধতি, যাতে আপনার নিজের রৈখিক বীজগণিত শ্রেণীর শীর্ষে নিজের রোল করতে হবে।

এনটি 2 -

সুবিধাগুলি: সিন্ট্যাক্স সরবরাহ করে যা বেশি পরিচিত আপনি যদি ম্যাটল্যাব ব্যবহার করেন। বড় ম্যাট্রিক্স ইত্যাদির জন্য সম্পূর্ণ পচন এবং সমাধান সরবরাহ করে

ডাউনসাইডস: গাণিতিক, রেন্ডারিং ফোকাস নয়। সম্ভবত আইগেনের মতো পারফরম্যান্ট নয়।

ল্যাপ -

উপকারিতা: খুব স্থিতিশীল, প্রমাণিত অ্যালগরিদম। দীর্ঘ সময় ধরে ছিল। ম্যাট্রিক্স সমাধান ইত্যাদি সম্পূর্ণ করুন, অস্পষ্ট গণিতের জন্য অনেকগুলি বিকল্প।

ডাউনসাইডস: কিছু ক্ষেত্রে ততটা পারফর্ম্যান্ট নয়। ব্যবহারের জন্য বিজোড় এপিআই সহ ফোর্টরান থেকে পোর্ট করা হয়েছে।

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


আপনি জিএমটিএল সিদ্ধান্ত নেওয়ার আগে অন্যান্য লাইব্রেরি মূল্যায়ন করেছেন? পৃষ্ঠের তুলনা আমাকে বিশ্বাস করতে পরিচালিত করে যে ইগেন আরও ভালভাবে সমর্থিত হয়েছিল, তবে সংশ্লিষ্ট ওয়েবসাইটগুলি পর্যালোচনা করার ভিত্তিতে তা স্থির করে। আপনি একে অপরের উপরের কোনও নির্দিষ্ট সুবিধা সম্পর্কে অবগত আছেন?
ক্যাটসকুল

ইগেন খুব ভাল কাজ করে। আমার তদন্ত করার সময় এটি এতটা পরিপক্ক ছিল না, তবে আমি বিশ্বাস করি এটি এই মুহূর্তে একটি ভাল বিকল্প হবে be GMTL মোটামুটি ব্যাপকভাবে ব্যবহৃত হয়েছে, এবং যখন আমি এটি ব্যবহার করার সিদ্ধান্ত নিয়েছিলাম তখন খুব পরিণত ও দৃ was় ছিল।
রিড কোপসি

আমি আমার প্রশ্নটি খুব জোর করে দেখিয়েছি: আপনি কি নিজের পছন্দকে "এটিকে আরও ভাল দেখায়" বা নির্দিষ্ট বৈশিষ্ট্যগুলির (এপিআই, গতি, স্মৃতি ব্যবহার, প্রস্থ, সংকীর্ণতা, এক্সটেনসিবিলিটি) মত পার্থক্য তৈরি করেছেন? আমি মনে করি পরিপক্কতা এই মানদণ্ডের আওতায় পড়েছে তবে পরিপক্কতা যদি কেবলমাত্র মেট্রিক হত তবে আমি ধারণা করি আপনি একটি বিএলএএস বা ল্যাপাক ভিত্তিক বিকল্পটি বেছে নিয়েছেন।
ক্যাটসকুল

আমি একাধিক বিকল্প চেষ্টা করার পরে এটি বেছে নিয়েছি এবং এটি ভিত্তিক বন্ধ করে রেখেছি: কার্য সম্পাদন, ব্যবহারযোগ্যতা এবং কম রানটাইম / কম টাইপ ওভারহেড। ইগেন এখন সে তুলনায় অনেক বেশি ভাল দেখায় তাই আমি তাদের মধ্যে বিচার করতে পারি না। যাইহোক, আমি আমাদের ব্যবহারের জন্য GMTL নিয়ে খুব খুশি হয়েছি।
রিড কোপসি

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

38

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

আমি শীর্ষে উল্লেখ করব যে আমি জিএমটিএল এর সাথে মূর্খতা থাকা সত্ত্বেও গিয়েছিলাম কারণ ইগেন 2 অসতর্কতা একটি নেতিবাচক দিক থেকে খুব বড় ছিল। তবে আমি সম্প্রতি শিখেছি যে ইগেন 2 এর পরবর্তী প্রকাশে এমন সংজ্ঞা দেওয়া থাকবে যা অ্যালাইনমেন্ট কোডটি বন্ধ করে দেবে এবং এটিকে নিরাপদ করে তুলবে। সুতরাং আমি যেতে পারে।

আপডেট : আমি আইজেন 3 এ চলেছি। এটি অদ্ভুত ঘটনাগুলির পরেও, এর ক্ষেত্র এবং কমনীয়তা উপেক্ষা করা খুব কঠিন এবং অপ্টিমাইজেশানগুলি যা এটি অনিরাপদ করে তোলে এটি একটি সংজ্ঞায়িত করে বন্ধ করা যেতে পারে।

Eigen2 / Eigen3

উপকারগুলি: এলজিপিএল এমপিএল 2, পরিষ্কার, ভাল ডিজাইন করা API, ব্যবহার করা মোটামুটি সহজ। একটি স্পন্দিত সম্প্রদায়ের সাথে ভাল রক্ষণাবেক্ষণ বলে মনে হচ্ছে। ওভারহেড কম স্মৃতি। উচ্চ পারদর্শিতা. সাধারণ লিনিয়ার বীজগণিতের জন্য তৈরি, তবে ভাল জ্যামিতিক কার্যকারিতাও উপলব্ধ। সমস্ত শিরোনাম lib, কোন লিঙ্ক প্রয়োজন।

ইডিয়োসাইক্রেসি / ডাউনসাইডস: ( বর্তমান উন্নয়ন শাখা আইজেন 3 এ উপলব্ধ কিছু সংজ্ঞা দ্বারা এগুলি / কিছু এড়ানো যেতে পারে )

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

GMTL

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

Idiocyncracies / মূল্যবান:

  • এপিআই হ'ল উদ্দীপনা
    • অন্য লিবে মাইভেক.এক্স () কী হতে পারে তা কেবল মাইভেকের মাধ্যমেই পাওয়া যায় [0] (পঠনযোগ্যতা সমস্যা)
      • একটি বিন্যাস বা stl :: পয়েন্টের ভেক্টর আপনাকে পয়েন্টলিস্টের মতো কিছু করতে পারে [প্রথম] [0] প্রথম পয়েন্টের এক্স উপাদান অ্যাক্সেস করতে
    • অপ্টিমাইজেশনের একটি নিখুঁত প্রয়াসে, সরানো ক্রস (ভিসি, ভিসি) সরানো হয়েছে এবং মেকক্রস (ভিজ, ভিসি, ভিসি) দিয়ে প্রতিস্থাপন করা হবে যখন সংকলক যেভাবেই অপ্রয়োজনীয় টেম্পগুলি অপসারণ করে
    • আপনি যদি কিছু অপ্টিমাইজেশান বৈশিষ্ট্য বন্ধ না করেন তবে সাধারণ গণিত ক্রিয়াকলাপগুলি সাধারণ ধরণের vec1 - vec2ফেরত দেয় না যেমন: সাধারণ ভেক্টরকে ফেরত দেয় না length( vecA - vecB )যদিও ব্যর্থ হয়vecC = vecA - vecB কাজ । আপনার অবশ্যই আবদ্ধ হতে হবে:length( Vec( vecA - vecB ) )
    • ভেক্টরগুলিতে অপারেশনগুলি সদস্যদের চেয়ে বাহ্যিক ফাংশন দ্বারা সরবরাহ করা হয়। এটির জন্য আপনাকে সর্বত্র স্কোপ রেজোলিউশনটি ব্যবহার করার প্রয়োজন হতে পারে যেহেতু সাধারণ চিহ্নের নামগুলি সংঘর্ষে আসতে পারে
    • আপনাকে করতে হবে
        length( makeCross( vecA, vecB ) )
      বা
        gmtl::length( gmtl::makeCross( vecA, vecB ) )
      অন্যথায় আপনি চেষ্টা করতে পারেন যেখানে
        vecA.cross( vecB ).length()
  • ভাল রক্ষণাবেক্ষণ করা হয় না
    • এখনও "বিটা" হিসাবে দাবি করা হয়েছে
    • সাধারণ কার্যকারিতা ব্যবহারের জন্য কোন শিরোনামের মতো বুনিয়াদি তথ্য নথিভুক্ত থাকে
      • ভেক.এইচটি ভেক্টরগুলির জন্য ক্রিয়াকলাপগুলি ধারণ করে না, ভেকপস.হ.কে কিছু রয়েছে, অন্যরা উদাহরণস্বরূপ জেনারেট.হাতে রয়েছে। ভেকোপস.চ.-এ ক্রস (ভিসি এবং, ভিসি এবং, ভিসি এবং), জেনারেট.এচ-এ ক্রস (ভিসি এবং ভিসি এবং) তৈরি করুন
  • অপরিণত / অস্থির API; এখনও পরিবর্তন।
    • উদাহরণস্বরূপ "ক্রস" "ভেকোপস.চ" থেকে "জেনারেট এইচ" তে সরানো হয়েছে এবং তারপরে নামটি "মেকক্রস" এ পরিবর্তন করা হয়েছে। ডকুমেন্টেশন উদাহরণগুলি ব্যর্থ হয়েছে কারণ এখনও অস্তিত্ব নেই এমন ফাংশনগুলির পুরানো সংস্করণগুলি উল্লেখ করে।

NT2

বলতে পারি না কারণ তারা লিখিত সামগ্রীর চেয়ে তাদের ওয়েব পৃষ্ঠার ফ্র্যাক্টাল চিত্রের শিরোনামে বেশি আগ্রহী বলে মনে হচ্ছে। একটি গুরুতর সফ্টওয়্যার প্রকল্পের চেয়ে একাডেমিক প্রকল্পের মতো দেখতে বেশি লাগে।

2 বছর আগে সর্বশেষ প্রকাশ।

সম্ভবত কোথাও ফ্রেঞ্চ ভাষায় কিছু আছে বলে মনে হচ্ছে ইংরেজিতে কোনও ডকুমেন্টেশন নেই।

প্রকল্পের চারপাশে একটি সম্প্রদায়ের সন্ধান করতে পারে না।

ল্যাপ এবং ব্লেস

উপকারিতা: বয়স্ক এবং পরিপক্ক

downsides:

  • সত্যই কৃপণ APIs সহ ডাইনোসর হিসাবে পুরানো

1
ইগেন সারিবদ্ধভাবে জোর দিয়েছিল: ছোট সেট ডেটার জন্য এসএসই (1,2,3 বা 4) অপারেশন থেকে উচ্চ কার্যকারিতা পেতে, আপনার একেবারে প্রান্তিক করা ডেটা প্রয়োজন। স্বাক্ষরবিহীন লোড / স্টোর অপারেশনগুলি অনেক ধীর। সারিবদ্ধ বা স্বাক্ষরযুক্ত লোড / স্টোরের মধ্যে সিদ্ধান্ত নিতে সময়ও লাগে। যে কোনও "সাধারণ উদ্দেশ্য" বাস্তবায়নের জন্য প্রত্যেকের জন্য সঠিক কাজ করতে সত্যই কঠিন সময় কাটাতে হবে, যদি না তারা ইন্টারফেসটিকে "প্রান্তিককরণ" এবং "স্বাক্ষরযুক্ত" অপারেশনগুলিতেও আলাদা করে না করে - তবে এটি আবার খুব সাধারণ উদ্দেশ্য নয়।
জোরিস টিমারম্যানস

@ ক্যাটসকুল আমি ইগিজেন 3 ব্যবহার করতে চাই। আপনি কি দয়া করে "অনুকূলিতকরণগুলি যা এটি অনিরাপদ তৈরি করে একটি সংজ্ঞায়িত করে বন্ধ করা যেতে পারে" তে প্রসারিত করতে পারেন? অন্যান্য বিষয় আপনি Eigen2 অধীনে তালিকাবদ্ধ সাবধানে বিস্তারিত করছে ডক অধীনে প্রান্তিককরণ সমস্যার সম্পর্কিত বিষয়ের । আমি এই সমস্যাগুলি নিয়ে বাঁচতে পারি।
আলী

সুরক্ষার সমস্যাগুলি আমি সম্পর্কিত সমস্ত প্রান্তিককরণের উল্লেখ করছি এবং ইগেন 2 থেকে একই। আপনি যদি ইগেন 2 এর সাথে ঠিক থাকেন তবে আপনি ইগিজেন 3 এর সাথে ভাল থাকবেন।
ক্যাটসকুল

2
বিএলএএস এবং ল্যাপাক আসলে লাইব্রেরি নয় তবে নির্দিষ্টকরণ / এপিআই। আপনি তাদের প্রাথমিক প্রয়োগগুলি নেটলিব বা অন্যান্য বাস্তবায়নের যেমন আটলাস এবং ওপেনবিএলএস দ্বারা উল্লেখ করতে পারেন।

12

এটির মূল্যের জন্য, আমি ইগেন এবং আর্মাদিলো উভয়ই চেষ্টা করেছি। নীচে একটি সংক্ষিপ্ত মূল্যায়ন করা হয়।

আইজেন উপকারিতা: ১. সম্পূর্ণ স্ব-অন্তর্ভুক্ত - বাহ্যিক বিএলএএস বা ল্যাপকের উপর নির্ভরতা নেই। ডকুমেন্টেশন শালীন। ৩. উদ্দেশ্যমূলকভাবে দ্রুত, যদিও আমি এটি পরীক্ষায় ফেলিনি।

অসুবিধা: আরআর ম্যাট্রিক্স উপরের ত্রিভুজটিতে এমবেড থাকা সাথে কিউআর অ্যালগরিদম কেবল একটি একক ম্যাট্রিক্স প্রদান করে। বাকি ম্যাট্রিক্সটি কোথা থেকে এসেছে তা কোনও ধারণা নয় এবং কোনও কিউ ম্যাট্রিক্স অ্যাক্সেস করা যাবে না।

আর্মাদিলো সুবিধা: 1. ক্ষয় এবং অন্যান্য কার্যাদি (কিউআর সহ) এর বিস্তৃত পরিসর। ২. যুক্তিযুক্তভাবে দ্রুত (এক্সপ্রেশন টেম্পলেটগুলি ব্যবহার করে), তবে আবার, আমি সত্যিই এটিকে উচ্চ মাত্রায় ঠেলে দিচ্ছি না।

অসুবিধাগুলি: ১. ম্যাট্রিক্স পচানোর জন্য বাহ্যিক BLAS এবং / অথবা LAPACK এর উপর নির্ভর করে। ২. ডকুমেন্টেশনে আইএমএইচও-র অভাব রয়েছে (# ডিফাইন স্টেটমেন্ট পরিবর্তনের পরিবর্তে ল্যাপ্যাকের নির্দিষ্টকরণগুলি অন্তর্ভুক্ত)।

যদি কোনও ওপেন সোর্স লাইব্রেরি পাওয়া যায় যা স্বাবলম্বিত এবং ব্যবহারের জন্য সোজা থাকে nice আমি 10 বছর ধরে এই একই সমস্যাটিতে চলেছি, এবং এটি হতাশ হয়ে পড়ে। এক পর্যায়ে, আমি সি এর জন্য জিএসএল ব্যবহার করেছি এবং এর চারপাশে সি ++ র‌্যাপারগুলি লিখেছি, তবে আধুনিক সি ++ সহ - বিশেষত এক্সপ্রেশন টেম্পলেটগুলির সুবিধা ব্যবহার করে - আমাদের একবিংশ শতাব্দীতে সি এর সাথে গোলযোগ করা উচিত নয়। শুধু আমার tuppencehapenny।


2
আরমাদিলোর ইচ্ছাকৃত মতলব-জাতীয় সিনট্যাক্স রয়েছে, যাতে এটি ব্যবহার করা সহজ। আমি নিশ্চিত নই যে আপনি "ডকুমেন্টেশনের অভাব বোধ করছেন ... স্পেসিফিকেশন আর্ট ল্যাপাক"। ডকুমেন্টেশনটি সমস্ত ব্যবহারকারীর উপলব্ধ ফাংশনগুলি স্পষ্টভাবে নথিভুক্ত করে এবং সেগুলি কীভাবে ব্যবহার করতে হয় তার উদাহরণ সহ। সি ++ র‌্যাপার লাইব্রেরি সম্পর্কে পুরো বিষয়টি হ'ল ল্যাপাকের জটিলতা এবং ভার্বোসটি দূর করে। আপনি যদি আর্মাদিলো কীভাবে ল্যাপকে কল করেন তা দেখতে আপনি সর্বদা উত্সটি ব্রাউজ করতে পারেন।
mtall

আইগেনে কিউআর পচন সম্পর্কে, আপনি ইগেন 2 বা ইগেন 3 মানে?
কেইড

11

আপনি যদি ইন্টেল প্রসেসরের উচ্চতর পারফরম্যান্স ম্যাট্রিক্স / লিনিয়ার বীজগণিত / অপ্টিমাইজেশন খুঁজছেন, আমি ইন্টেলের এমকেএল লাইব্রেরিটি দেখব।

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

খুব সংক্ষেপে, এর মধ্যে রয়েছে:

  1. বেসিক ভেক্টর-ভেক্টর, ভেক্টর-ম্যাট্রিক্স এবং ম্যাট্রিক্স-ম্যাট্রিক্স ক্রিয়াকলাপ
  2. ম্যাট্রিক্স ফ্যাক্টেরাইজেশন (এলইউ ডিকম্প, হার্মিটিয়ান, স্পারস)
  3. স্বল্প স্কোয়ারের ফিটিং এবং ইগেনুয়ালু সমস্যা
  4. বিচ্ছিন্ন রৈখিক সিস্টেম solvers
  5. অ-রৈখিক সর্বনিম্ন স্কোয়ার সলভার (বিশ্বাস অঞ্চলসমূহ)
  6. প্লাস সিগন্যাল প্রসেসিং রুটিন যেমন এফএফটি এবং কনভোলশন
  7. খুব দ্রুত এলোমেলো সংখ্যা জেনারেটর (মার্শেন টুইস্ট)
  8. আরও অনেক .... দেখুন: লিঙ্ক পাঠ্য

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

পল

সেন্টারস্পেস সফ্টওয়্যার, .NET গণিত গ্রন্থাগারগুলি, Centerpace.net


8

আমি ইগেন এবং এনটি 2 সম্পর্কে ভাল কথা শুনেছি , তবে ব্যক্তিগতভাবে সেগুলি ব্যবহার করি নি। এর রয়েছে Boost.UBLAS , যা আমি বিশ্বাস করি দাঁত দীর্ঘ একটি বিট হচ্ছে। এনটি 2 এর বিকাশকারীরা এটি বুস্টে পাওয়ার উদ্দেশ্যে পরবর্তী সংস্করণটি তৈরি করছে, যাতে কিছুটা হলেও গুনতে পারে।

আমার লিন ALG। 4x4 ম্যাট্রিক্স কেস ছাড়িয়ে যাওয়া দরকার নেই, তাই আমি উন্নত কার্যকারিতা নিয়ে মন্তব্য করতে পারি না; আমি কেবল কিছু বিকল্প দেখিয়ে দিচ্ছি।


আমার অভিজ্ঞতায় (আরও বড় ম্যাট্রিক), বুস্ট.উব্ল্যাবস আরও বেশি ব্যবহৃত হয়। যাইহোক, যখন আমি এটি সন্ধান করলাম, আমি এটি পছন্দ করিনি (মূলত ডকুমেন্টেশনের কারণে) তাই আমি ইগেনের প্রতি মনোনিবেশ করেছি। আইগেনের জ্যামিতি মডিউল রয়েছে , তবে আমি নিজে এটি ব্যবহার করি নি।
জিতসে নিসেন

ইগেন স্পষ্টতই আরওএস (উইলো গ্যারেজ), সেলেস্টিয়া, কফিস এবং লিবিএমভি ব্যবহার করে। আমি ইউবিএলএএস সম্পর্কে কিছু বকবক দেখতে পাচ্ছি, তবে প্রকল্পটি ব্যবহার করার বিজ্ঞাপনী যারা আসতে পেরেছিলেন তাদের বেশ কষ্ট হয়েছে। এনটি 2 এর জন্য ডিটো। আপনি কি ভাল জিনিস শুনেছেন তা বিস্তারিত বলতে পারেন?
ক্যাটসকুল

এটি বুস্টে একটি আধুনিক লিনএলজি গ্রন্থাগার যুক্ত করার বিষয়ে বুস্ট মেলিং তালিকার আলোচনায় ছিল - ইগেন এবং এনটি 2 উভয়ই সম্ভাব্য প্রার্থী হিসাবে উল্লেখ করা হয়েছিল, তবে কেবল এনটি 2 বিকাশকারীরা এটি অনুসরণে আগ্রহ প্রকাশ করেছে। দুটি গ্রন্থাগারই শালীন মনে হয়েছিল; যেমনটি আপনি বলেছিলেন, আইগেন কিছুটা বেশি জনপ্রিয় এবং আরও সি ​​++ - ইশ; NT2 যতটা সম্ভব ম্যাটল্যাব অনুকরণ করার জন্য ডিজাইন করা হয়েছে।
জেফ হার্ডি

8

আমি এই বিষয়ে নতুন, তাই আমি পুরো অনেক কিছুই বলতে পারি না, তবে বিএএলএএস বৈজ্ঞানিক কম্পিউটিংয়ের মান অনেক বেশি। বিএলএএস আসলে একটি এপিআই মান, যার অনেকগুলি প্রয়োগ রয়েছে। আমি বাস্তবতার সাথে নিশ্চিত নই যে কোন প্রয়োগগুলি সবচেয়ে জনপ্রিয় বা কেন।

আপনার কাছে সাধারণ রৈখিক বীজগণিত অপারেশন করতে সক্ষম হতে চান (সমাধানে সিস্টেম, লিস্ট স্কোয়ার প্রত্যাবৃত্তি, পচানি, ইত্যাদি) দেখব LAPACK


7

জিএলএম সম্পর্কে কী ?

এটি ওপেনজিএল শেডিং ল্যাঙ্গুয়েজ (জিএলএসএল) নির্দিষ্টকরণের ভিত্তিতে এবং এমআইটি লাইসেন্সের আওতায় প্রকাশিত হয়েছে। স্পষ্টভাবে গ্রাফিক্স প্রোগ্রামারদের লক্ষ্য


ভাল, এটি গ্রাফিক্স প্রোগ্রামিং ভেক্টর এবং ম্যাট্রিক্স সরবরাহ করে। এটি জিএলএসএল (যদি আপনি জিএলএসএল করতে পারেন, বেশিরভাগ সময় জিএলএসএল করে বিশেষত জিএল ৪.x এর সাথে করতে পারেন), এবং অনেক গ্রাফিক্স প্রোগ্রামিং আদিমগুলি হতাশ করে (হতাশ, এএবিবি, বিবি, উপবৃত্ত) )। এটি সুইজার ইন্টারফেস এটি স্থূলকায়। যদি এর কিছু কোড জেনারেশনের সাথে ".xyzz ()" ফাংশন তৈরি হয় তবে এর চেয়ে আরও ভাল বিকল্প হতে পারে। এটি সঠিক যখন আপনি ওপেনগল অ্যাপ্লিকেশনগুলি প্রোটোটাইপ করতে হয় এবং বড় প্রকল্পগুলিতে এর নেতিবাচক দিকগুলি দেখানো শুরু করে। গণিতের পাঠাগারটি কখনই কোড করবেন না।
কফডি ডেভেলপার

5

আমি ইগেনের পক্ষে ভোট যুক্ত করব: আমি বিভিন্ন লাইব্রেরি থেকে এইটিতে প্রচুর কোড (3 ডি জ্যামিতি, লিনিয়ার বীজগণিত এবং ডিফারেনশিয়াল সমীকরণ) পোর্ট করেছি - প্রায় সব ক্ষেত্রেই পারফরম্যান্স এবং কোড পঠনযোগ্যতা উভয়ের উন্নতি করে।

একটি সুবিধা যা উল্লেখ করা হয়নি: এটিগেনের সাথে এসএসই ব্যবহার করা খুব সহজ, যা 2D-3 ডি ক্রিয়াকলাপের (যেখানে সমস্ত কিছু 128 বিটকে প্যাড করা যায়) উল্লেখযোগ্যভাবে উন্নতি করে।


1
পুরো "যদি আপনি এটি করেন তবে তা নিশ্চিত করুন ..." জিনিসটি আমাকে কিছুটা লাল পতাকা হিসাবে আঘাত করে। এখনও অবধি আমি এই বিষয়গুলিতে দু'বার প্রবেশ করেছি এবং আমি কেবল এটি ব্যবহার শুরু করেছি। আমি প্রতিটি লাইব্রেরির সব ধরণের আইডিয়াসিনক্রিয়াগুলি জানার জন্য ভবিষ্যতের বিকাশকারীদের বোঝা না করার আশাবাদী ছিলাম: বিশেষত এমন প্রান্তিককরণের সমস্যা যেখানে এটি ক্র্যাশ হয় যদি আপনি প্রত্যেকবার সদস্যদের সাথে নির্দিষ্ট ম্যাক্রোগুলি ব্যবহার না করেন এবং তারা পৃথকভাবে কার্যকারিতা ছড়িয়ে দিয়েছেন এই সত্যটি একাধিক শিরোনাম জুড়ে ক্লাস। এটি একাই এটি আমাকে বেছে নিতে বাধা দিতে পারে না, তবে এটি একটি লাল পতাকা কিছুটা প্রেরণ করেছে।
ক্যাটসকুল

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

এবং প্রান্তিককরণ ম্যাক্রো এড়ানোর একটি সহজ উপায় রয়েছে - সদস্য হিসাবে পয়েন্টার বা রেফারেন্স ব্যবহার করুন।
ইমাম

1
আমি সত্য মনে করি না। আমি কোনও বিশেষ এসএসই বিকল্প ব্যবহার করিনি এবং স্টিল পাত্রে এটি ব্যবহারের পরে বেশ কয়েকটি ক্র্যাশ পেয়েছি। হ্যাঁ আমি জানি এটি আপনাকে সহায়ক বার্তা দেয় এবং হ্যাঁ আমি জানি বিশেষ নির্দেশাবলী রয়েছে তবে এটি আমার বিষয় point আমি অন্তর্ভুক্ত প্রতিটি লাইব্রেরির জন্য বিশেষ নির্দেশাবলী সহ অন্যান্য বিকাশকারীদের বোঝা বোঝাতে চাই না। উদাহরণস্বরূপ মান জিনিস দিয়ে পাস করবেন না খুব বেশি।
ক্যাটসকুল

আমি কেবলমাত্র খুঁজে পেয়েছি যে সর্বশেষতম উন্নয়ন শাখায় কিছু সংজ্ঞা রয়েছে যা আপনি প্রান্তিককরণ বন্ধ করতে এবং সম্পর্কিত সমস্যাগুলি এড়াতে ব্যবহার করতে পারেন।
ক্যাটসকুল

4

ঠিক আছে, আমি মনে করি আপনি জানেন আপনি কি জানেন। রিড কপসির পরামর্শ অনুসারে এটি উপস্থিত হয় যে জিজিটি হ'ল একটি দুর্দান্ত সমাধান।

ব্যক্তিগতভাবে, আমরা আমাদের নিজস্ব ছোট গ্রন্থাগারটি ঘূর্ণিত করেছি, কারণ আমরা প্রচুর যুক্তিযুক্ত পয়েন্টগুলি নিয়ে কাজ করি - প্রচুর যুক্তিযুক্ত NURBS এবং বেজিয়ার্স।

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

আপনার প্রশ্নের সাথে সরাসরি সম্পর্কিত নয়, তবে একটি আকর্ষণীয় পঠন।


এটি ইচ্ছাকৃতভাবে উন্মুক্ত যে বাণিজ্য সম্পর্কে কী তা সম্পর্কে আমি অসচেতন। সম্ভবত এটি বলা ন্যায়সঙ্গত যে জ্যামিতি আমাদের প্রধান উদ্বেগ জ্যামিতির মাত্রিকতা পরিষ্কার নয়। বর্তমানে এটি 2/3 (2 + সময়) এবং অনুমানকৃতভাবে বেশ উচ্চতর হতে পারে (3 ডিিমস + সময় + মাল্টি-ডিমে-কাস্টম্যাপস)।
ক্যাটসকুল

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

সুতরাং আপনি যে লাইব্রেরিগুলি অনুসন্ধান করেছেন সেগুলির মধ্যে কি আপনি বলছেন, কেউই এনআরবিএস এবং বেজিয়ার্সের যত্ন নেননি? বিদ্যমান গ্রন্থাগারগুলির একটি না নেওয়ার এবং এর পাশাপাশি NURBS এবং বেজিয়ার সমর্থন তৈরি করার কোনও বিশেষ কারণ?
ক্যাটসকুল

আমি যা বলার চেষ্টা করছিলাম তা হল যুক্তিযুক্ত NURBS এবং বেজিয়ার্স 3 ডি অ্যাপ্লিকেশনগুলির চেয়ে অনেক বেশি যুক্তিযুক্ত নিয়ন্ত্রণ পয়েন্টগুলি ব্যবহার করে, তাই আমরা আরও ভুল করেছিলাম। সাধারণত বেশিরভাগ 3 ডি অ্যাপ্লিকেশনগুলিতে কেবল ভ্যানিলা 3 ডি পয়েন্ট এবং ভেক্টর থাকে দৃষ্টিভঙ্গি রূপান্তরিত হওয়ার পরে অবধি। আমাদের অনেক অ্যালগরিদমকে ভারী / যুক্তিযুক্ত / প্রজেক্টিভ এবং কার্টেসিয়ান পয়েন্টগুলি সঠিকভাবে পরিচালনা করতে সক্ষম হতে হবে, পিছনে পিছনে যাওয়া ইত্যাদি etc.
tfinniga


0

আমি এই লাইব্রেরিটি বেশ সহজ এবং কার্যকরী পেয়েছি ( http://kirillsprograms.com/top_Vectors.php )। এগুলি C ++ টেম্পলেটগুলির মাধ্যমে প্রয়োগ করা খালি হাড়ের ভেক্টর। অভিনব জিনিস নেই - কেবল ভেক্টরগুলির সাথে আপনার যা করা দরকার (অ্যাড, বিয়োগফল, বিন্দু ইত্যাদি) with


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