скорость обработки, вероятно, 40.
Из результатов видно, что обработка данных очень медленная.
Можете ли вы дать мне какое-то предложение, большое спасибо
это функция bws
import numpy as np
from scipy.stats import rankdata
def BWS(Xarrar, Yarray, threshold):
n, m = Xarrar.shape
rank = rankdata(np.vstack((Xarrar, Yarray)), axis=0)
xrank = np.sort(rank[0:n,:], axis=0)
yrank = np.sort(rank[n::,:], axis=0)
temp = np.arange(1, n+1)[:,np.newaxis]*np.ones((1,m))
tempx = (xrank - 2.0*temp) ** 2
tempy = (yrank - 2.0*temp) ** 2
temp = temp/(n+1) * (1-temp/(n+1)) * 2 * n
BX = 1/n * np.sum(tempx / temp, axis=0)
BY = 1/n * np.sum(tempy / temp, axis=0)
# test statistic
B = 1/2*(BX + BY)
if threshold ==0.05:
if n == 5:
b = 2.533
elif n == 6:
b = 2.552
elif n == 7:
b = 2.620
elif n == 8:
b = 2.564
elif n == 9:
b = 2.575
elif n == 10:
b = 2.583
else:
b = 2.493
else:
b = 3.880
H = (B >=b)
H = np.transpose(H)
return H
Поскольку в будущем мне придется иметь дело с очень большими матрицами, для хранения данных мне придется использовать dask. Однако, как новичок в dask, я хочу использовать dask для достижения той же скорости обработки, что и numpy
PixelInd = dask.array.zeros((CalWin[0] * CalWin[1],nlines*nwidths), chunks=(CalWin[0] * CalWin[1],2048*nlines),dtype=np.bool) num = 0 compar_pixel = dask.array.zeros((CalWin[0] * CalWin[1],nlines*nwidths), chunks=(CalWin[0] * CalWin[1],2048*nlines),dtype=np.bool) for kk in tqdm(range(InitCol, nwidths_EP-RadiusCol), desc="Processing columns",ascii=' ='): for ll in tqdm(range(InitRow, nlines_EP-RadiusRow), desc="Processing rows",leave=False, ascii=' ='): Matrix = mlistack[:,ll-RadiusRow-1:ll+RadiusRow,kk-RadiusCol-1:kk+RadiusCol] Ref = Matrix[:,InitRow-1,InitCol-1] Xarray = dask.array.tile(Ref[:, np.newaxis], (1, CalWin[0] * CalWin[1])) Matrix_T = dask.array.transpose(Matrix, (0, 2, 1)) Yarray = dask.array.reshape(Matrix_T, (Matrix_T.shape[0], CalWin[0] * CalWin[1])) T = dask.array.from_array(bws.BWS(Xarray.compute(), Yarray.compute(), thershold)) SeedPoint = dask.array.transpose(dask.array.reshape(~T, (CalWin[1], CalWin[0]))) LL = dask.array.from_array(label(SeedPoint.compute(), 2)) LL_flat = dask.array.Array.flatten(dask.array.transpose(LL)) compar_pixel[:,num] = (LL_flat == LL[InitRow - 1, InitCol - 1]) PixelInd[:,num] = (LL_flat == LL[InitRow - 1, InitCol - 1]) num = num + 1 [/code] скорость обработки, вероятно, 40. Из результатов видно, что обработка данных очень медленная. Можете ли вы дать мне какое-то предложение, большое спасибо это функция bws [code]import numpy as np from scipy.stats import rankdata def BWS(Xarrar, Yarray, threshold): n, m = Xarrar.shape rank = rankdata(np.vstack((Xarrar, Yarray)), axis=0) xrank = np.sort(rank[0:n,:], axis=0) yrank = np.sort(rank[n::,:], axis=0) temp = np.arange(1, n+1)[:,np.newaxis]*np.ones((1,m)) tempx = (xrank - 2.0*temp) ** 2 tempy = (yrank - 2.0*temp) ** 2 temp = temp/(n+1) * (1-temp/(n+1)) * 2 * n BX = 1/n * np.sum(tempx / temp, axis=0) BY = 1/n * np.sum(tempy / temp, axis=0) # test statistic B = 1/2*(BX + BY) if threshold ==0.05: if n == 5: b = 2.533 elif n == 6: b = 2.552 elif n == 7: b = 2.620 elif n == 8: b = 2.564 elif n == 9: b = 2.575 elif n == 10: b = 2.583 else: b = 2.493 else: b = 3.880
H = (B >=b) H = np.transpose(H) return H [/code] Поскольку в будущем мне придется иметь дело с очень большими матрицами, для хранения данных мне придется использовать dask. Однако, как новичок в dask, я хочу использовать dask для достижения той же скорости обработки, что и numpy
Я хотел бы вычислить спектральные нормы эрмитовых матриц N 8x8, при этом N близок к 1E6. В качестве примера возьмем 1 миллион случайных комплексных матриц размером 8x8: