NdArray

পাবলিক ইন্টারফেস NdArray
পরিচিত পরোক্ষ উপশ্রেণী

N-মাত্রার একটি ডেটা স্ট্রাকচার।

'NdArray' ইন্টারফেস একটি ডেটা রেকর্ডের ফিজিক্যাল স্টোরেজের মধ্যে একটি বিমূর্ততা তৈরি করে, যা রৈখিক বা বিভক্ত হতে পারে এবং এর যৌক্তিক উপস্থাপনা। সাধারণভাবে, তারা মেমরিতে সরাসরি লিনিয়ার ডেটা সেগমেন্ট ম্যাপ করে জাভাতে স্ট্যান্ডার্ড মাল্টি-ডাইমেনশনাল অ্যারেগুলির চেয়ে ভাল পারফরম্যান্স অর্জন করে।

DataBuffer এর মতো, NdArray দৃষ্টান্তগুলি 64-বিট ইন্ডেক্সিং সমর্থন করে যাতে সেগুলি খুব বড় ডেটা রেকর্ড ম্যাপ করতে ব্যবহার করা যেতে পারে। তারা বিশেষ স্থানাঙ্কগুলিকেও সমর্থন করে যা তাদের মানগুলিকে যেকোন দিকে অতিক্রম করতে বা তাদের শুধুমাত্র একটি উপসেট নির্বাচন করতে দেয়।

ব্যবহারের উদাহরণ:

// Creates a 2x3x2 matrix (of rank 3)
    FloatNdArray matrix3d = NdArrays.ofFloats(shape(2, 3, 2));

    // Initialize sub-matrices data with vectors
    matrix.set(NdArrays.vectorOf(1.0f, 2.0f), 0, 0)
          .set(NdArrays.vectorOf(3.0f, 4.0f), 0, 1)
          .set(NdArrays.vectorOf(5.0f, 6.0f), 0, 2)
          .set(NdArrays.vectorOf(7.0f, 8.0f), 1, 0)
          .set(NdArrays.vectorOf(9.0f, 10.0f), 1, 1)
          .set(NdArrays.vectorOf(11.0f, 12.0f), 1, 2);

    // Access the second 3x2 matrix (of rank 2)
    FloatNdArray matrix = matrix3d.get(1);

    // Access directly the float value at (1, 0) from the second matrix
    assertEquals(9.0f, matrix.getFloat(1, 0));
 

পাবলিক পদ্ধতি

বিমূর্ত NdArray <T>
কপিটু ( NdArray <T> dst)
এই অ্যারের বিষয়বস্তু গন্তব্য অ্যারেতে অনুলিপি করুন।
বিমূর্ত NdArraySequence <? NdArray <T>> প্রসারিত করে
উপাদান (int dimensionIdx)
একটি প্রদত্ত মাত্রায় সমস্ত উপাদানের একটি ক্রম দেখায়।
বিমূর্ত বুলিয়ান
সমান (অবজেক্ট অবজেক্ট)
n-মাত্রিক অ্যারেগুলির মধ্যে সমতা পরীক্ষা করে।
বিমূর্ত NdArray <T>
পান (দীর্ঘ... স্থানাঙ্ক)
প্রদত্ত স্থানাঙ্কে এই বিন্যাসের N-মাত্রিক উপাদান প্রদান করে।
বিমূর্ত টি
getObject (দীর্ঘ... স্থানাঙ্ক)
প্রদত্ত স্থানাঙ্কে পাওয়া স্কেলারের মান প্রদান করে।
বিমূর্ত NdArray <T>
পড়ুন ( DataBuffer <T> dst)
গন্তব্য বাফারে এই N-মাত্রিক অ্যারের বিষয়বস্তু পড়ুন।
বিমূর্ত NdArraySequence <? NdArray <T>> প্রসারিত করে
স্কেলার ()
এই অ্যারের সমস্ত স্কেলারের একটি ক্রম দেখায়।
বিমূর্ত NdArray <T>
সেট ( NdArray <T> src, দীর্ঘ... স্থানাঙ্ক)
প্রদত্ত স্থানাঙ্কে পাওয়া N-মাত্রিক উপাদানের মান নির্ধারণ করে।
বিমূর্ত NdArray <T>
setObject (T মান, দীর্ঘ... স্থানাঙ্ক)
প্রদত্ত স্থানাঙ্কে পাওয়া স্কেলারের মান নির্ধারণ করে।
বিমূর্ত NdArray <T>
স্লাইস ( সূচক... সূচক)
প্রদত্ত সূচক নির্বাচকদের এক বা একাধিক মাত্রা ম্যাপ করে এই অ্যারের একটি বহুমাত্রিক দৃশ্য (বা স্লাইস) তৈরি করে।
বিমূর্ত NdArray <T>
লিখুন ( DataBuffer <T> src)
উৎস বাফার থেকে এই N-মাত্রিক অ্যারের বিষয়বস্তু লিখুন।

উত্তরাধিকারসূত্রে প্রাপ্ত পদ্ধতি

পাবলিক পদ্ধতি

সর্বজনীন বিমূর্ত NdArray <T> copyTo ( NdArray <T> dst)

এই অ্যারের বিষয়বস্তু গন্তব্য অ্যারেতে অনুলিপি করুন।

গন্তব্য অ্যারের shape() অবশ্যই এই অ্যারের আকৃতির সমান হতে হবে, অথবা একটি ব্যতিক্রম নিক্ষেপ করা হবে। অনুলিপি করার পরে, উভয় অ্যারের বিষয়বস্তু একে অপরকে প্রভাবিত না করে স্বাধীনভাবে পরিবর্তন করা যেতে পারে।

পরামিতি
dst এই অ্যারের বিষয়বস্তুর একটি অনুলিপি পেতে অ্যারে
রিটার্নস
  • এই অ্যারে
নিক্ষেপ করে
অবৈধ আর্গুমেন্ট ব্যতিক্রম যদি dst এর আকৃতি এই অ্যারের আকারের সমান না হয়

সর্বজনীন বিমূর্ত NdArraySequence <? NdArray <T>> উপাদানগুলিকে প্রসারিত করে (int dimensionIdx)

একটি প্রদত্ত মাত্রায় সমস্ত উপাদানের একটি ক্রম দেখায়।

যৌক্তিকভাবে, N-মাত্রিক অ্যারে একটি একক ভেক্টরে সমতল করা যেতে পারে, যেখানে (n - 1) তম উপাদানের স্কেলারগুলি (n) তম উপাদানের আগে থাকে, মোট size() মানের জন্য।

উদাহরণস্বরূপ, [x, y] অক্ষগুলিতে একটি nxm ম্যাট্রিক্স দেওয়া হলে, উপাদানগুলিকে নিম্নলিখিত ক্রমে পুনরাবৃত্তি করা হয়:

x 0 y 0 , x 0 y 1 , ..., x 0 y m-1 , x 1 y 0 , x 1 y 1 , ..., x n-1 y m-1

প্রত্যাবর্তিত ক্রমটি প্রতিটি উপাদান দেখার জন্য পুনরাবৃত্তি করা যেতে পারে, হয় forEach(Consumer) অথবা forEachIndexed(BiConsumer) কল করে।

// Iterate matrix for initializing each of its vectors
    matrixOfFloats.elements(0).forEach(v -> {
      v.set(vector(1.0f, 2.0f, 3.0f));
    );

    // Iterate a vector for reading each of its scalar
    vectorOfFloats.scalars().forEachIdx((coords, s) -> {
      System.out.println("Value " + s.getFloat() + " found at " + coords);
    });
 }

পরামিতি
dimensionIdx মাত্রার সূচক
রিটার্নস
  • একটি NdArray ক্রম
নিক্ষেপ করে
অবৈধ আর্গুমেন্ট ব্যতিক্রম যদি dimensionIdx এই অ্যারের মোট মাত্রার সংখ্যার চেয়ে বড় বা সমান হয়

সর্বজনীন বিমূর্ত বুলিয়ান সমান (অবজেক্ট অবজেক্ট)

n-মাত্রিক অ্যারেগুলির মধ্যে সমতা পরীক্ষা করে।

একটি অ্যারে অন্য বস্তুর সমান যদি এই বস্তুটি একই আকৃতির অন্য NdArray হয়, টাইপ এবং উপাদানগুলি সমান এবং একই ক্রমে হয়। যেমন:

IntNdArray array = NdArrays.ofInts(Shape.of(2, 2))
    .set(NdArrays.vectorOf(1, 2), 0)
    .set(NdArrays.vectorOf(3, 4), 1);

 assertEquals(array, StdArrays.ndCopyOf(new int[][] { {1, 2, {3, 4} }));  // true
 assertEquals(array, StdArrays.ndCopyOf(new Integer[][] { {1, 2}, {3, 4} }));  // true, as Integers are equal to ints
 assertNotEquals(array, NdArrays.vectorOf(1, 2, 3, 4));  // false, different shapes
 assertNotEquals(array, StdArrays.ndCopyOf(new int[][] { {3, 4}, {1, 2} }));  // false, different order
 assertNotEquals(array, StdArrays.ndCopyOf(new long[][] { {1L, 2L}, {3L, 4L} }));  // false, different types
 }

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

পরামিতি
বস্তু এই অ্যারের সাথে তুলনা করার জন্য অবজেক্ট
রিটার্নস
  • সত্য যদি এই অ্যারে প্রদত্ত বস্তুর সমান হয়

সর্বজনীন বিমূর্ত NdArray <T> পান (দীর্ঘ... স্থানাঙ্ক)

প্রদত্ত স্থানাঙ্কে এই বিন্যাসের N-মাত্রিক উপাদান প্রদান করে।

এই অ্যারের যেকোনো মাত্রার উপাদান পুনরুদ্ধার করা যেতে পারে। উদাহরণস্বরূপ, যদি স্থানাঙ্কের সংখ্যা এই অ্যারের মাত্রার সংখ্যার সমান হয়, তাহলে একটি র‌্যাঙ্ক-0 (স্ক্যালার) অ্যারে দেওয়া হবে, যে মানটি তখন `array.getObject()` কল করে পাওয়া যেতে পারে।

প্রত্যাবর্তিত উপাদানগুলিতে প্রয়োগ করা যে কোনও পরিবর্তন এই অ্যারের ডেটাকেও প্রভাবিত করে, কারণ এতে কোনও অনুলিপি জড়িত নেই।

মনে রাখবেন যে এই পদ্ধতিটি চালু করা এই অ্যারেটিকে একক স্কেলারে স্লাইস করার একটি সমতুল্য এবং আরও কার্যকর উপায়, যেমন array.get(x, y, z) হল array.slice(at(x), at(y), at(z))

পরামিতি
স্থানাঙ্ক অ্যাক্সেস করার জন্য উপাদানের স্থানাঙ্ক, কেউ এই অ্যারে ফিরিয়ে দেবে না
রিটার্নস
  • এই সূচকের উপাদান
নিক্ষেপ করে
IndexOutOfBoundsException যদি কিছু স্থানাঙ্ক তাদের নিজ নিজ মাত্রার সীমার বাইরে থাকে

সর্বজনীন বিমূর্ত T getObject (দীর্ঘ... স্থানাঙ্ক)

প্রদত্ত স্থানাঙ্কে পাওয়া স্কেলারের মান প্রদান করে।

স্কেলার এলিমেন্ট অ্যাক্সেস করতে, প্রদত্ত স্থানাঙ্কের সংখ্যা অবশ্যই এই অ্যারের মাত্রার সংখ্যার সমান হতে হবে (অর্থাৎ এর র‍্যাঙ্ক)। উদাহরণস্বরূপ:

FloatNdArray matrix = NdArrays.ofFloats(shape(2, 2));  // matrix rank = 2
  matrix.getObject(0, 1);  // succeeds, returns 0.0f
  matrix.getObject(0);  // throws IllegalRankException

  FloatNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
  scalar.getObject();  // succeeds, returns 0.0f
 
দ্রষ্টব্য: যদি এই অ্যারেটি একটি আদিম প্রকারের মান সঞ্চয় করে, তাহলে সেই ধরণের জন্য সাবক্লাসে বিশেষায়িত পদ্ধতির ব্যবহার পছন্দ করুন। উদাহরণস্বরূপ, floatArray.getFloat(0); .

পরামিতি
স্থানাঙ্ক সমাধানের জন্য স্কেলারের স্থানাঙ্ক
রিটার্নস
  • যে স্কেলার মান
নিক্ষেপ করে
IndexOutOfBoundsException যদি কিছু স্থানাঙ্ক তাদের নিজ নিজ মাত্রার সীমার বাইরে থাকে
অবৈধ র‌্যাঙ্ক ব্যতিক্রম যদি স্থানাঙ্কের সংখ্যা একটি স্কেলার উপাদান অ্যাক্সেস করার জন্য যথেষ্ট না হয়

সর্বজনীন বিমূর্ত NdArray <T> পড়া ( DataBuffer <T> dst)

গন্তব্য বাফারে এই N-মাত্রিক অ্যারের বিষয়বস্তু পড়ুন।

বাফারের আকার অবশ্যই এই অ্যারের size() এর সমান বা বড় হতে হবে, অথবা একটি ব্যতিক্রম নিক্ষেপ করা হবে। অনুলিপি করার পরে, বাফার এবং অ্যারের বিষয়বস্তু একে অপরকে প্রভাবিত না করে স্বাধীনভাবে পরিবর্তন করা যেতে পারে।

পরামিতি
dst গন্তব্য বাফার
রিটার্নস
  • এই অ্যারে
নিক্ষেপ করে
BufferOverflowException যদি বাফার এই অ্যারের বিষয়বস্তু ধরে রাখতে না পারে
আরো দেখুন

সর্বজনীন বিমূর্ত NdArraySequence <? প্রসারিত করে NdArray <T>> স্কেলার ()

এই অ্যারের সমস্ত স্কেলারের একটি ক্রম দেখায়।

এটি কল elements(shape().numDimensions() - 1)

রিটার্নস
  • একটি NdArray ক্রম

সর্বজনীন বিমূর্ত NdArray <T> সেট ( NdArray <T> src, দীর্ঘ... স্থানাঙ্ক)

প্রদত্ত স্থানাঙ্কে পাওয়া N-মাত্রিক উপাদানের মান নির্ধারণ করে।

প্রদত্ত স্থানাঙ্কের সংখ্যা 0 এবং র্যাঙ্ক - 1-এর মধ্যে যে কোনও জায়গায় হতে পারে। উদাহরণস্বরূপ:

FloatNdArray matrix = NdArrays.ofFloats(shape(2, 2));  // matrix rank = 2
  matrix.set(vector(10.0f, 20.0f), 0);  // success
  matrix.set(scalar(10.0f), 1, 0); // success
 

পরামিতি
src বরাদ্দ করার জন্য মানগুলির একটি অ্যারে
স্থানাঙ্ক বরাদ্দ করার জন্য উপাদানের স্থানাঙ্ক
রিটার্নস
  • এই অ্যারে
নিক্ষেপ করে
IndexOutOfBoundsException যদি কিছু স্থানাঙ্ক তাদের নিজ নিজ মাত্রার সীমার বাইরে থাকে

সর্বজনীন বিমূর্ত NdArray <T> setObject (T মান, দীর্ঘ... স্থানাঙ্ক)

প্রদত্ত স্থানাঙ্কে পাওয়া স্কেলারের মান নির্ধারণ করে।

স্কেলার এলিমেন্ট অ্যাক্সেস করতে, প্রদত্ত স্থানাঙ্কের সংখ্যা অবশ্যই এই অ্যারের মাত্রার সংখ্যার সমান হতে হবে (অর্থাৎ এর র‍্যাঙ্ক)। উদাহরণস্বরূপ:

FloatNdArray matrix = NdArrays.ofFloats(shape(2, 2));  // matrix rank = 2
  matrix.setObject(10.0f, 0, 1);  // succeeds
  matrix.setObject(10.0f, 0);  // throws IllegalRankException

  FloatNdArray scalar = matrix.get(0, 1);  // scalar rank = 0
  scalar.setObject(10.0f);  // succeeds
 
দ্রষ্টব্য: যদি এই অ্যারেটি একটি আদিম প্রকারের মান সঞ্চয় করে, তাহলে সেই ধরণের জন্য সাবক্লাসে বিশেষায়িত পদ্ধতির ব্যবহার পছন্দ করুন। উদাহরণস্বরূপ, floatArray.setFloat(10.0f, 0);

পরামিতি
মান বরাদ্দ করার মান
স্থানাঙ্ক বরাদ্দ করার জন্য স্কেলারের স্থানাঙ্ক
রিটার্নস
  • এই অ্যারে
নিক্ষেপ করে
IndexOutOfBoundsException যদি কিছু স্থানাঙ্ক তাদের নিজ নিজ মাত্রার সীমার বাইরে থাকে
অবৈধ র‌্যাঙ্ক ব্যতিক্রম যদি স্থানাঙ্কের সংখ্যা একটি স্কেলার উপাদান অ্যাক্সেস করার জন্য যথেষ্ট না হয়

সর্বজনীন বিমূর্ত NdArray <T> স্লাইস ( সূচক... সূচক)

প্রদত্ত সূচক নির্বাচকদের এক বা একাধিক মাত্রা ম্যাপ করে এই অ্যারের একটি বহুমাত্রিক দৃশ্য (বা স্লাইস) তৈরি করে।

স্লাইসগুলি এর যেকোন অক্ষে একটি N-মাত্রিক বিন্যাস অতিক্রম করতে এবং/অথবা শুধুমাত্র আগ্রহের উপাদানগুলিকে ফিল্টার করতে দেয়। উদাহরণস্বরূপ, [x, y] অক্ষের একটি প্রদত্ত ম্যাট্রিক্সের জন্য, সমস্ত x এর জন্য y=0 এ উপাদানগুলিকে পুনরাবৃত্তি করা সম্ভব।

প্রত্যাবর্তিত স্লাইসে প্রয়োগ করা যেকোনো পরিবর্তন এই অ্যারের ডেটাকেও প্রভাবিত করে, কারণ এতে কোনো অনুলিপি জড়িত নেই।

ব্যবহারের উদাহরণ:

FloatNdArray matrix3d = NdArrays.ofFloats(shape(3, 2, 4));  // with [x, y, z] axes

    // Iterates elements on the x axis by preserving only the 3rd value on the z axis,
    // (i.e. [x, y, 2])
    matrix3d.slice(all(), all(), at(2)).elements(0).forEach(m -> {
      assertEquals(shape(2), m); // y=2, z=0 (scalar)
    );

    // Creates a slice that contains only the last element of the y axis and elements with an
    // odd `z` coordinate.
    FloatNdArray slice = matrix3d.slice(all(), at(1), odd());
    assertEquals(shape(3, 2), slice.shape());  // x=3, y=0 (scalar), z=2 (odd coordinates)

    // Iterates backward the elements on the x axis
    matrix3d.slice(flip()).elements(0).forEach(m -> {
      assertEquals(shape(2, 4), m);  // y=2, z=4
    });
 }

পরামিতি
সূচক প্রতি মাত্রা সূচক নির্বাচক, এই অ্যারের মাত্রা 0 থেকে শুরু করে।
রিটার্নস
  • সূচক নির্বাচনের ফলে উপাদান
নিক্ষেপ করে
IndexOutOfBoundsException যদি কিছু স্থানাঙ্ক তাদের নিজ নিজ মাত্রার সীমার বাইরে থাকে

সর্বজনীন বিমূর্ত NdArray <T> লিখুন ( DataBuffer <T> src)

উৎস বাফার থেকে এই N-মাত্রিক অ্যারের বিষয়বস্তু লিখুন।

বাফারের আকার অবশ্যই এই অ্যারের size() এর সমান বা বড় হতে হবে, অথবা একটি ব্যতিক্রম নিক্ষেপ করা হবে। অনুলিপি করার পরে, বাফার এবং অ্যারের বিষয়বস্তু একে অপরকে প্রভাবিত না করে স্বাধীনভাবে পরিবর্তন করা যেতে পারে।

পরামিতি
src উৎস বাফার
রিটার্নস
  • এই অ্যারে
নিক্ষেপ করে
BufferUnderflowException যদি বাফারে এই অ্যারেতে লেখার জন্য পর্যাপ্ত অবশিষ্ট ডেটা না থাকে
আরো দেখুন