GVKun编程网logo

沿3D数组中的第三轴计算2D数组的逆数而无循环

20

对于想了解沿3D数组中的第三轴计算2D数组的逆数而无循环的读者,本文将提供新的信息,并且为您提供关于2D数组中的均和池、c#–从3D数组中获取子数组、c#–如何初始化2D数组的数组?、javascri

对于想了解沿3D数组中的第三轴计算2D数组的逆数而无循环的读者,本文将提供新的信息,并且为您提供关于2D数组中的均和池、c# – 从3D数组中获取子数组、c# – 如何初始化2D数组的数组?、javascript – JS计算2d数组中相同元素的平均值的有价值信息。

本文目录一览:

沿3D数组中的第三轴计算2D数组的逆数而无循环

沿3D数组中的第三轴计算2D数组的逆数而无循环

我有一个A形状为的数组,(N, N, K)我想计算另一个B形状相同的数组where B[:, :, i] =np.linalg.inv(A[:, :, i])

作为解决方案,我看到mapfor循环,但是我想知道是否numpy提供了执行此操作的功能(我已经尝试过,np.apply_over_axes但似乎只能处理一维数组)。

for循环:

B = np.zeros(shape=A.shape)for i in range(A.shape[2]):    B[:, :, i] = np.linalg.inv(A[:, :, i])

map

B = np.asarray(map(np.linalg.inv, np.squeeze(np.dsplit(A, A.shape[2])))).transpose(1, 2, 0)

答案1

小编典典

对于可逆矩阵,M我们拥有inv(M).T == inv(M.T)(逆的转置等于转置的逆)。

由于np.linalg.inv是可广播的,因此您可以通过简单地转置A,调用inv和转置结果来解决您的问题:

B = np.linalg.inv(A.T).T

例如:

>>> N, K = 2, 3>>> A = np.random.randint(1, 5, (N, N, K))>>> Aarray([[[4, 2, 3],        [2, 3, 1]],       [[3, 3, 4],        [4, 4, 4]]])>>> B = np.linalg.inv(A.T).T>>> Barray([[[ 0.4  , -4.   ,  0.5  ],        [-0.2  ,  3.   , -0.125]],       [[-0.3  ,  3.   , -0.5  ],        [ 0.4  , -2.   ,  0.375]]])

您可以按预期检查Bmatch的逆数组的值A

>>> all(np.allclose(B[:, :, i], np.linalg.inv(A[:, :, i])) for i in range(K))True

2D数组中的均和池

2D数组中的均和池

如何解决2D数组中的均和池?

我正在尝试实现自定义池化方法-aka-偶数和池(内核中所有偶数的和)。我研究了最大池实现here

编辑

例如,如果我输入的是

await

我的输出应该是

A = np.array([[1,1,2,4],[5,6,7,8],[3,0],[1,3,4]])

基于实现here,我执行了以下代码,并添加了两个辅助功能

将numpy导入为np 从numpy.lib.stride_tricks导入as_strided

[[ 6 14]
 [ 4  4]]

这可行,但是我对如何将最后两行代码更改为1行感兴趣。

我该怎么做?请提出建议。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

c# – 从3D数组中获取子数组

c# – 从3D数组中获取子数组

如果我有一个数组:
int[,] mainArray = new int[10,10,3];

我怎样才能得到一个子数组:

int[] sub = mainArray[0,1]; // Unfortunately this doesn't work

sub将包含3个元素

sub[0] = mainArray[0,1,0];
sub[1] = mainArray[0,1];
sub[2] = mainArray[0,2];

编写一个方法来做这个很容易,但有没有内置的方法来做到这一点?

解决方法

我想你可以使用这样的扩展方法:
public static class MyExtensions
{
    public static int[] GetValues(this Array source,int x,int y)
    {
        var length = source.GetUpperBound(2);
        var values = new int[length+1];
        for (int i = 0; i < length+1; i++)
        {
            values[i] = (int)source.GetValue(x,y,i);
        }
        return values;
    }
}

用法:

int[,3];
int[] sub = mainArray.GetValues(0,1);

c# – 如何初始化2D数组的数组?

c# – 如何初始化2D数组的数组?

我有一个2D阵列阵列.例如,它就像:
{{{0,1},{1,0}}
{{0,3},{2,1,2},2,{3,7},6},{6,3,{7,0}}}

但如果我写

int [,][] arrays={{{0,0}}
                  {{0,0}}};

编译器会抱怨“;预期”.

如果我写

int [,][] arrays={new int[,] {{0,0}}
                  new int[,0}}};

编译器会抱怨

“A nested array initializer is expected”.

那么为什么会这样发生,什么是正确的初始化方法?

解决方法

您正在尝试创建锯齿状阵列.你的数组有n行,所以你的第一个Square应该是[]不是[,].每行中的元素(n的索引)是2D数组,因此您需要使用[,].最后,您可以通过将int [,] []更改为int [] [,]来解决问题.
int[][,] arrays = {
    new int[,0}},new int[,0}}
};

javascript – JS计算2d数组中相同元素的平均值

javascript – JS计算2d数组中相同元素的平均值

我有一个由两列表示为数组的“表”.第一列是1到20的数字,它们是标签,第二列是相应的值(秒):
my_array = [ [ 3,4,5,3,2 ],[ 12,14,16,11,12,10,20 ] ];

我需要每个标签的平均值(平均值):

my_mean_array = [ [ 2,5 ],[ 20/1,(12+11)/2,(14+12)/2,(16+10)/2 ] ];
// edit: The mean should be a float - the notion above is just for clarification.
// Also the number 'labels' should remain as numbers/integers.

我的尝试:

var a = my_array[0];
var b = my_array[1];
m = [];
n = [];
for( var i = 0; a.length; i++){
    m[ a[i] ] += b[i]; // accumulate the values in the corresponding place
    n[ a[i] ] += 1; // count the occurences
}
var o = [];
var p = [];
o = m / n;
p.push(n);
p.push(o);

解决方法

怎么样(原生JS,不会破坏旧版浏览器):
function arrayMean(ary) {
  var index = {},i,label,value,result = [[],[]];

  for (i = 0; i < ary[0].length; i++) {
    label = ary[0][i];
    value = ary[1][i];
    if (!(label in index)) {
      index[label] = {sum: 0,occur: 0};
    }
    index[label].sum += value;
    index[label].occur++;
  }
  for (i in index) {
    if (index.hasOwnProperty(i)) {
      result[0].push(parseInt(i,10));
      result[1].push(index[i].occur > 0 ? index[i].sum / index[i].occur : 0);
    }
  }
  return result;
}

FWIW,如果你想要花哨我已经创造了一些其他方法来做到这一点.它们依赖于外部库,并且很可能比原生解决方案慢一个数量级.但他们看起来更好.

看起来像这样,用underscore.js:

function arrayMeanUnderscore(ary) {
  return _.chain(ary[0])
    .zip(ary[1])
    .groupBy(function (item) { return item[0]; })
    .reduce(function(memo,items) {
      var values = _.pluck(items,1),toSum = function (a,b) { return a + b; };

      memo[0].push(items[0][0]);
      memo[1].push(_(values).reduce(toSum) / values.length);
      return memo;
    },[[],[]])
    .value();
}

// --------------------------------------------

arrayMeanUnderscore([[3,2],[12,20]]);
// -> [[2,5],[20,11.5,13,13]]

或者像这样,真正伟大的linq.js(我用过v2.2):

function arrayMeanLinq(ary) {
  return Enumerable.From(ary[0])
    .Zip(ary[1],"[$,$$]")
    .GroupBy("$[0]")
    .Aggregate([[],[]],function (result,item) {
      result[0].push(item.Key());
      result[1].push(item.Average("$[1]"));
      return result;
    });
}

// --------------------------------------------

arrayMeanLinq([[3,20]]);
// -> [[3,[11.5,20]]

正如所怀疑的那样,“花哨”实现比本机实现慢一个数量级:jsperf comparison.

我们今天的关于沿3D数组中的第三轴计算2D数组的逆数而无循环的分享已经告一段落,感谢您的关注,如果您想了解更多关于2D数组中的均和池、c# – 从3D数组中获取子数组、c# – 如何初始化2D数组的数组?、javascript – JS计算2d数组中相同元素的平均值的相关信息,请在本站查询。

本文标签: