我試圖找回225,30×30點的矩陣,從一個矩陣是450利用切片450如何通過n矩陣每n由M矩陣
我能得到一個30提取一個m由30矩陣,但我不知道如何迭代,並得到休息,有無論如何這樣做?
x = 30
extract = []
extract1 = []
while (x < 450):
extract1 = test1[x:, x:]
x += 30
extract.append(extract1)
我試圖找回225,30×30點的矩陣,從一個矩陣是450利用切片450如何通過n矩陣每n由M矩陣
我能得到一個30提取一個m由30矩陣,但我不知道如何迭代,並得到休息,有無論如何這樣做?
x = 30
extract = []
extract1 = []
while (x < 450):
extract1 = test1[x:, x:]
x += 30
extract.append(extract1)
我覺得這給你所需要的輸出,但我相信有一個更優雅的方式來做到這一點。
import numpy as np
a = np.arange(16).reshape(4,4)
extracts = []
x = 2
for i in xrange(x):
for j in xrange(x):
extracts.append(a[i*x :x + i*x, j*x : x + j*x])
使用numpy的公司跨入觀點:
import numpy as np
def make_windows(x, ws):
m,n = x.shape
s,t = ws
shape = (m/s, n/t) + ws
strides = (s * x.strides[0], t * x.strides[1]) + x.strides
windows = np.lib.stride_tricks.as_strided(x, shape=shape, strides=strides)
return windows.reshape(-1, s, t)
讓我們嘗試一下的一些數據:
>>> data = np.arange(450*450).reshape(450,450)
>>> windows = make_windows(data, (30,30))
>>> windows.shape
(225, 30, 30)
>>> windows
array([[[ 0, 1, 2, ..., 27, 28, 29],
[ 450, 451, 452, ..., 477, 478, 479],
[ 900, 901, 902, ..., 927, 928, 929],
...,
[ 12150, 12151, 12152, ..., 12177, 12178, 12179],
[ 12600, 12601, 12602, ..., 12627, 12628, 12629],
[ 13050, 13051, 13052, ..., 13077, 13078, 13079]],
[[ 30, 31, 32, ..., 57, 58, 59],
[ 480, 481, 482, ..., 507, 508, 509],
[ 930, 931, 932, ..., 957, 958, 959],
...,
[ 12180, 12181, 12182, ..., 12207, 12208, 12209],
[ 12630, 12631, 12632, ..., 12657, 12658, 12659],
[ 13080, 13081, 13082, ..., 13107, 13108, 13109]],
...,
這是我要去的方法還有一個'einsum'或者類似的東西,非常有效的記憶。 – 2014-12-13 18:16:52
有很多方法可以從你的大矩陣中提取30×30的矩陣,請說明哪些你想提取和你的代碼有什麼問題。 – elyase 2014-12-13 16:31:41
我想要所有的225個,但是隨着代碼的迭代,矩陣變爲60乘60,依此類推。我的代碼僅適用於提取第一個30乘30矩陣 – user4357505 2014-12-13 16:34:10
*爲什麼「你想這樣做?下面的一些解決方案正確回答了這個問題,但是有更有效的方法,特別是如果以後你要計算平均數或每個新的30x30象限的總和,另外,這個問題在幾天前被一位作者提出,他刪除了他自己的問題,如果那是你,那麼不要重複發佈一次 – 2014-12-13 17:58:02