ज्ञात अप्रत्यक्ष उपवर्ग |
एन-आयामों की एक डेटा संरचना।
'एनडीएरे' इंटरफ़ेस डेटा रिकॉर्ड के भौतिक भंडारण, जो रैखिक या खंडित हो सकता है, और इसके तार्किक प्रतिनिधित्व के बीच एक अमूर्तता बनाता है। सामान्य तौर पर, वे मेमोरी में सीधे रैखिक डेटा खंडों को मैप करके जावा में मानक बहु-आयामी सरणियों की तुलना में बेहतर प्रदर्शन प्राप्त करते हैं।
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));
सार्वजनिक तरीके
सार एनडीअरे <टी> | |
सार NdArraySequence <? NdArray <T>> का विस्तार करता है | तत्व (पूर्णांक आयामआईडीएक्स) किसी दिए गए आयाम पर सभी तत्वों का अनुक्रम लौटाता है। |
अमूर्त बूलियन | बराबर (वस्तु obj) एन-आयामी सरणियों के बीच समानता की जाँच करता है। |
सार एनडीअरे <टी> | प्राप्त करें (लंबा...निर्देशांक) दिए गए निर्देशांक पर इस सरणी का एन-आयामी तत्व लौटाता है। |
सार टी | getObject (लंबा...निर्देशांक) दिए गए निर्देशांक पर पाए गए अदिश मान को लौटाता है। |
सार एनडीअरे <टी> | |
सार NdArraySequence <? NdArray <T>> का विस्तार करता है | अदिश () इस सरणी में सभी अदिशों का अनुक्रम लौटाता है। |
सार एनडीअरे <टी> | |
सार एनडीअरे <टी> | सेटऑब्जेक्ट (टी मान, लंबा... निर्देशांक) दिए गए निर्देशांक पर पाए गए अदिश मान को निर्दिष्ट करता है। |
सार एनडीअरे <टी> | स्लाइस ( सूचकांक... सूचकांक) दिए गए सूचकांक चयनकर्ताओं के लिए एक या अधिक आयामों को मैप करके इस सरणी का एक बहु-आयामी दृश्य (या स्लाइस) बनाता है। |
सार एनडीअरे <टी> |
विरासत में मिले तरीके
सार्वजनिक तरीके
सार्वजनिक सार NdArray <T> CopyTo ( NdArray <T> dst)
इस सरणी की सामग्री को गंतव्य सरणी में कॉपी करें।
गंतव्य सरणी का shape()
इस सरणी के आकार के बराबर होना चाहिए, या एक अपवाद फेंक दिया जाएगा। प्रतिलिपि के बाद, दोनों सरणियों की सामग्री को एक-दूसरे को प्रभावित किए बिना, स्वतंत्र रूप से बदला जा सकता है।
पैरामीटर
डीएसटी | इस सारणी की सामग्री की एक प्रति प्राप्त करने के लिए सारणी |
---|
रिटर्न
- यह सरणी
फेंकता
IllegalArgumentException | यदि dst का आकार इस सरणी के आकार के बराबर नहीं है |
---|
सार्वजनिक सार NdArraySequence <? NdArray <T>> तत्वों का विस्तार करता है (int आयामIdx)
किसी दिए गए आयाम पर सभी तत्वों का अनुक्रम लौटाता है।
तार्किक रूप से, एन-आयामी सरणी को एक ही वेक्टर में समतल किया जा सकता है, जहां कुल size()
मानों के लिए (n - 1)
वें तत्व के स्केलर (n)
वें तत्व से पहले होते हैं।
उदाहरण के लिए, [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);
});
}
पैरामीटर
आयामIdx | आयाम का सूचकांक |
---|
रिटर्न
- एक
NdArray
अनुक्रम
फेंकता
IllegalArgumentException | यदि dimensionIdx इस सरणी के आयामों की कुल संख्या से अधिक या उसके बराबर है |
---|
सार्वजनिक सार बूलियन बराबर (ऑब्जेक्ट ओब्जेक्ट)
एन-आयामी सरणियों के बीच समानता की जाँच करता है।
एक सरणी किसी अन्य ऑब्जेक्ट के बराबर होती है यदि यह ऑब्जेक्ट समान आकार, प्रकार का एक और 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> प्राप्त करें (लंबे... निर्देशांक)
दिए गए निर्देशांक पर इस सरणी का एन-आयामी तत्व लौटाता है।
इस सरणी के किसी भी आयाम के तत्वों को पुनः प्राप्त किया जा सकता है। उदाहरण के लिए, यदि निर्देशांक की संख्या इस सरणी के आयामों की संख्या के बराबर है, तो एक रैंक-0 (स्केलर) सरणी लौटा दी जाती है, जिसका मान `array.getObject()` पर कॉल करके प्राप्त किया जा सकता है।
लौटाए गए तत्वों पर लागू कोई भी परिवर्तन इस सरणी के डेटा को भी प्रभावित करता है, क्योंकि इसमें कोई प्रतिलिपि शामिल नहीं है।
ध्यान दें कि इस विधि को लागू करना इस सरणी को एकल स्केलर पर स्लाइस करने का एक समतुल्य और अधिक कुशल तरीका है, यानी array.get(x, y, z)
array.slice(at(x), at(y), at(z))
के बराबर है array.slice(at(x), at(y), at(z))
पैरामीटर
COORDINATES | एक्सेस करने के लिए तत्व के निर्देशांक, कोई भी इस सरणी को वापस नहीं करेगा |
---|
रिटर्न
- इस सूचकांक में तत्व
फेंकता
IndexOutOfBoundsException | यदि कुछ निर्देशांक अपने संबंधित आयाम की सीमा से बाहर हैं |
---|
सार्वजनिक सार टी 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);
. पैरामीटर
COORDINATES | हल करने के लिए अदिश के निर्देशांक |
---|
रिटर्न
- उस अदिश राशि का मान
फेंकता
IndexOutOfBoundsException | यदि कुछ निर्देशांक अपने संबंधित आयाम की सीमा से बाहर हैं |
---|---|
अवैधरैंक अपवाद | यदि किसी अदिश तत्व तक पहुँचने के लिए निर्देशांकों की संख्या पर्याप्त नहीं है |
सार्वजनिक सार NdArray <T> पढ़ें ( DataBuffer <T> dst)
इस एन-आयामी सरणी की सामग्री को गंतव्य बफर में पढ़ें।
बफ़र का आकार इस सरणी के size()
के बराबर या उससे अधिक होना चाहिए, अन्यथा एक अपवाद फेंक दिया जाएगा। प्रतिलिपि के बाद, बफ़र और सरणी की सामग्री को एक-दूसरे को प्रभावित किए बिना, स्वतंत्र रूप से बदला जा सकता है।
पैरामीटर
डीएसटी | गंतव्य बफ़र |
---|
रिटर्न
- यह सरणी
फेंकता
बफ़रओवरफ़्लो अपवाद | यदि बफ़र इस सरणी की सामग्री को धारण नहीं कर सकता है |
---|
यह भी देखें
सार्वजनिक सार NdArraySequence <? NdArray <T>> स्केलर का विस्तार करता है ()
इस सरणी में सभी अदिशों का अनुक्रम लौटाता है।
यह कॉल elements(shape().numDimensions() - 1)
के बराबर है
रिटर्न
- एक
NdArray
अनुक्रम
सार्वजनिक सार NdArray <T> सेट ( NdArray <T> src, long... निर्देशांक)
दिए गए निर्देशांक पर पाए गए एन-आयामी तत्व का मान निर्दिष्ट करता है।
प्रदान किए गए निर्देशांकों की संख्या 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
पैरामीटर
स्रोत | असाइन किए जाने वाले मानों की एक सारणी |
---|---|
COORDINATES | असाइन किए जाने वाले तत्व के निर्देशांक |
रिटर्न
- यह सरणी
फेंकता
IndexOutOfBoundsException | यदि कुछ निर्देशांक अपने संबंधित आयाम की सीमा से बाहर हैं |
---|
सार्वजनिक सार NdArray <T> सेटऑब्जेक्ट (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);
पैरामीटर
कीमत | असाइन किया जाने वाला मान |
---|---|
COORDINATES | निर्दिष्ट करने के लिए अदिश के निर्देशांक |
रिटर्न
- यह सरणी
फेंकता
IndexOutOfBoundsException | यदि कुछ निर्देशांक अपने संबंधित आयाम की सीमा से बाहर हैं |
---|---|
अवैधरैंक अपवाद | यदि किसी अदिश तत्व तक पहुँचने के लिए निर्देशांकों की संख्या पर्याप्त नहीं है |
सार्वजनिक सार NdArray <T> स्लाइस ( सूचकांक... सूचकांक)
दिए गए सूचकांक चयनकर्ताओं के लिए एक या अधिक आयामों को मैप करके इस सरणी का एक बहु-आयामी दृश्य (या स्लाइस) बनाता है।
स्लाइस किसी एन-आयामी सरणी को उसके किसी भी अक्ष में पार करने और/या केवल रुचि के तत्वों को फ़िल्टर करने की अनुमति देते हैं। उदाहरण के लिए, [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)
स्रोत बफ़र से इस एन-आयामी सरणी की सामग्री लिखें।
बफ़र का आकार इस सरणी के size()
के बराबर या उससे अधिक होना चाहिए, अन्यथा एक अपवाद फेंक दिया जाएगा। प्रतिलिपि के बाद, बफ़र और सरणी की सामग्री को एक-दूसरे को प्रभावित किए बिना, स्वतंत्र रूप से बदला जा सकता है।
पैरामीटर
स्रोत | स्रोत बफ़र |
---|
रिटर्न
- यह सरणी
फेंकता
बफ़रअंडरफ्लो अपवाद | यदि बफ़र के पास इस सरणी में लिखने के लिए पर्याप्त शेष डेटा नहीं है |
---|