This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
Peter: It seems to me that you should ask yourself the question whether arraycopy(from ma into x[]) insomeloop { pixels[count++] = *** Some expression involving x[count] *** } would be faster, better than the alternative you are proposing insomeloop{ pixels[count++] = *** Some expression involving *** ma.getDouble(index) } Do you have some idea that the "function call overhead" of ma.getDouble(index) is significant compared to x[ii]? Although probably true on a CRAY without inlining, it is not clear to me that this is true in java. In fact, I believe one could construct 2-D MultiArray implementation where // int [2] index; insomeloop { f(getDouble(index)); } is faster than insomeloop { f((double) x[i][j]); } and also faster than insomeloop { f((double) x[i * dimsize + j]); } in java for large dimensions. (Think of an MultiArray implementation that chunks data to lower memory page fault costs.) Using the former method, you are assuming your input MultiArray is always componentType double? (Unless you always cast...) Using the getDouble() method, you've got the type you want (with clear exception semantics) no matter what input componentType is. ---- Having said all this, the current Netcdf Variable accessor methods aren't very swift. We will be working on it. -glenn