簡體   English   中英

Numpy - 如何使用此算法從 2d 中的 3d 矩陣傳遞

[英]Numpy - How pass from 3d matrix in 2d with this algorithm

我需要一個更高效的代碼,即我在下面實現的代碼。 是否有可能有一個更有效的代碼,也使用 numpy?

我將解釋我的算法及其工作原理。 考慮下圖,我有一個矩陣,里面包含 10000 個矩陣,里面的每個矩陣都有一個維度 100x100。 在此處輸入圖像描述

我的 output 應該是一個 100x100 的矩陣,如下所示:

輸出

因此,我的“輸出” V[f(a_1,b_1)]的第一個元素是 10000 個矩陣中包含的所有f(a_1,b_1)元素的方差。 因此,我需要計算具有相同索引的元素的方差。

下面是使用的代碼,它應該是正確的(我希望..)。 是否有可能有更高效的代碼? (為簡單起見,我用隨機數模擬輸入,因為矩陣太大而無法在此處發布)

import numpy as np
input = np.random.randint(0, 100, size=(10000, 100, 100))
output = []
for n in range(100):
    row = []
    for i in range(100):
        row2 = [] 
        for m in range(10000):
            P_mi_sigmai = input[m][n][i]
            row2.append(P_mi_sigmai)
        variance = np.var(row2) 
        row.append(variance)
    output.append(row)
print(np.array(output).shape)

這是我會怎么做:

output = input.var(axis = 0)

這是一個最小的代表:

import numpy as np

arr = np.random.rand(5, 2, 2)
arr[:, 0, 0] = 1
var_arr = arr.var(0)


print(f'arr = \n{arr}')
print(f'var_arr = \n{var_arr}')

output:

arr = 
[[[1.         0.13682225]
  [0.24076008 0.61107865]]

 [[1.         0.99948733]
  [0.61871626 0.64518322]]

 [[1.         0.7979549 ]
  [0.53991881 0.17229415]]

 [[1.         0.13547922]
  [0.97390205 0.50778721]]

 [[1.         0.74116566]
  [0.05428085 0.86287107]]]
var_arr = 
[[0.         0.12837323]
 [0.10101842 0.05092759]]

我不會在這里展示它,但使用你的代碼我得到相同的結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM