gpt4 book ai didi

Java多维数组索引

转载 作者:行者123 更新时间:2023-11-30 07:03:55 25 4
gpt4 key购买 nike

我试图将Java中的任意维度的矩阵表示为一维数组,并且我正在努力实现我正在编写的函数,以在给定矩阵中的位置的情况下计算数组中的正确索引。这是我到目前为止所拥有的:

private int indexOf(int... indices) {
assert indices.length == rank() :
"Number of indices does not match rank";
if(indices.length == 1) return indices[0];
int x = 0;
for(int i = 1; i < indices.length; ++i){
x += indices[i] % this.dims[i];
}
return x;
}

其中rank()返回矩阵的维数,this.dims是一个数组,其中包含每个维度的大小。

我知道 i=y*numCols + x 适用于二维版本,但我只是在抽象为具有可变维度的矩阵时遇到困难。

感谢您的帮助。

最佳答案

抱歉,我出于自己的兴趣回答(在 JavaScript 中 - 可在 Chrome 开发工具中运行):

function SuperMatrix() {
this.ranks = [].slice.call(arguments);
this.rankCount = this.ranks.length;

this.arraySize =
this.ranks.reduce(function(a,b) { return a*b; }, 1);

this.dimensionSize = [];

this.dimensionSize[this.rankCount-1] = 1;
for (var i = this.rankCount-2; i >= 0; i -= 1) {
this.dimensionSize[i] =
this.dimensionSize[i+1]*this.ranks[i+1];
}

this.array = new Array(this.arraySize);
}

SuperMatrix.prototype._index = function() {

var indexes = [].slice.call(arguments);
if (indexes.length !== this.rankCount)
throw new Error('invalid number of indexes');

var index = 0;
for (var i = 0; i < this.rankCount; i += 1) {
index += indexes[i]*this.dimensionSize[i];
}

if (index < 0 || index >= this.arraySize)
throw new Error('invalid index: ' + indexes.join(', '));

return index;
}

SuperMatrix.prototype.get = function() {
var index = this._index.apply(this, arguments);
return this.array[index];
};

SuperMatrix.prototype.set = function(value) {
var indexes = [].slice.call(arguments, 1);

var index = this._index.apply(this, indexes);
this.array[index] = value;

return value;
};


var foo = new SuperMatrix(2,3,5);

for (var i = 0; i < 2; i+=1) {
for (var j =0; j < 3; j+=1) {
for (var k = 0; k < 5; k+= 1) {
foo.set([i,j,k].join(':'), i,j,k);
}
}
}

for (var i = 0; i < 2; i+=1) {
for (var j =0; j < 3; j+=1) {
for (var k = 0; k < 5; k+= 1) {
console.log(foo.get(i,j,k));
}
}
}


console.log(foo);

对于更高维度的索引:当索引增加 1 时,您必须按照子数组的大小在后备数组中移动。

关于Java多维数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40451413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com