对于想了解沿3D数组中的第三轴计算2D数组的逆数而无循环的读者,本文将提供新的信息,并且为您提供关于2D数组中的均和池、c#–从3D数组中获取子数组、c#–如何初始化2D数组的数组?、javascri
对于想了解沿3D数组中的第三轴计算2D数组的逆数而无循环的读者,本文将提供新的信息,并且为您提供关于2D数组中的均和池、c# – 从3D数组中获取子数组、c# – 如何初始化2D数组的数组?、javascript – JS计算2d数组中相同元素的平均值的有价值信息。
本文目录一览:沿3D数组中的第三轴计算2D数组的逆数而无循环
我有一个A
形状为的数组,(N, N, K)
我想计算另一个B
形状相同的数组where B[:, :, i] =np.linalg.inv(A[:, :, i])
。
作为解决方案,我看到map
并for
循环,但是我想知道是否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]]])
您可以按预期检查B
match的逆数组的值A
:
>>> all(np.allclose(B[:, :, i], np.linalg.inv(A[:, :, i])) for i in range(K))True
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数组中获取子数组
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数组的数组?
{{{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”.
那么为什么会这样发生,什么是正确的初始化方法?
解决方法
int[][,] arrays = { new int[,0}},new int[,0}} };
javascript – JS计算2d数组中相同元素的平均值
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);
解决方法
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数组中相同元素的平均值的相关信息,请在本站查询。
本文标签: