الاستخدام العملي للمصفوفات ذات الأبعاد n ، حيث (n> 3)
-
30-09-2019 - |
سؤال
لقد قمت برمجة على مدى السنوات الثماني الماضية ، والآن كنت أتساءل فقط أنه إذا كان هناك أي استخدام عملي لمصفوفة N- الأبعاد ، حيث لا يمكن أن أتخيل سوى بنية بيانات أقل من أو تساوي 3 أبعاد . أي شخص يستخدم أكثر من 3 أبعاد في أي برنامج؟ هل هناك أي استخدامات عملية لصفيف ND الذي يتجاوز 3D؟ إذا كان الأمر كذلك ، فيرجى نشر بعض العينات.
المحلول
المثال الوحيد اللائق الذي أذكره كان في نص 1982 أوه! باسكال! مما يمنحك فكرة عن مدى ندرة في تجربتي.
كان المثال هو نظام حفظ الأسهم حيث يمكن فهرسة الجينز
inventory[sex][size][length][color][fit] = number_received
وهو مفتعل قليلاً فقط. لن تواجه أي مشكلة في قاعدة بيانات منظمة بهذه الطريقة ولكنها تبدو مضحكة كرمز.
نصائح أخرى
خذ أي شيء تقريبًا من الفيزياء ، حيث تكون التنسور شائعة ، على سبيل المثال النسبية العامة ، الكيمياء الحسابية ، الفيزياء الكمومية.
http://en.wikipedia.org/wiki/Tensor#applications
التوتر مع المرتبة 4 شائعة على سبيل المثال.
http://www.oonumerics.org/ftensor/ftensor.pdf
http://mpqc.svn.sourceforge.net/viewvc/mpqc/trunk/mpqc/src/lib/chemistry
333 double
334 LMP2::compute_ecorr_lmp2()
335 {
336 Timer tim("ecorr");
337
338 sma2::Index r("r"), s("s");
339 sma2::Array<0> ecorr;
340 double ecorr_lmp2 = 0.0;
341 for (my_occ_pairs_t::const_iterator iter = my_occ_pairs_.begin();
342 iter != my_occ_pairs_.end();
343 iter++) {
344 sma2::Index i(iter->first-nfzc_);
345 sma2::Index j(iter->second-nfzc_);
346 if (j.value() > i.value()) continue;
347 double f;
348 if (i.value() != j.value()) f = 2.0;
349 else f = 1.0;
350 ecorr.zero();
351 ecorr() += f * 2.0 * K_2occ_(i,j,r,s) * T_local_(i,j,r,s);
352 ecorr() -= f * K_2occ_(i,j,s,r) * T_local_(i,j,r,s);
353 ecorr_lmp2 += ecorr.value();
354 }
355
356 msg_->sum(ecorr_lmp2);
357
358 return ecorr_lmp2;
359 }
المثال الأكثر وضوحًا هو قائمة مسافات Voxel ... 3 + 1 = 4 أبعاد :)
صفيف يحمل جميع الأبراج المحصنة في Ultima III سيكون من المنطقي صفيفًا بأربعة أبعاد. كل زنزانة هي شبكة ثلاثية الأبعاد من الخلايا ، وكلها بنفس الحجم.