使用 Python 堆叠二维矩阵
stacking 2D matrix using Python
我有一个脚本可以将 1024x1024 矩阵重塑为 32x32 矩阵。这是代码:
import numpy as np
filename = r'bb1e03'
background = r'bb1e03_background'
size = 1024
resize = 32
n = np.arange(size)
T0 = np.loadtxt(filename, unpack=False)
bg = np.loadtxt(background, unpack=False)
T = T0-bg
for s in n: # s here is the row number
B = np.reshape(T[s], (resize, resize))
B_rev = B[...,::-1]
name = str(filename) + '_column_'+ str.zfill(str(s), 4)
np.savetxt(name+'.txt', B_rev)
现在我需要堆叠所有 32x32 矩阵,以便最终得到一个 32x32x1024 矩阵。你能告诉我我该怎么做吗?我发现 np.dstack 可以完成这项工作,但我不知道如何将它包含在脚本中。
谢谢。
由于 np.dstack
需要所有矩阵的元组来堆叠,所以无论如何都必须单独存储它们。
解决您的问题的一个简单方法是在生成重塑矩阵时将它们放置在堆叠结构中。
stacked = np.empty((32, 32, 1024))
for s in xrange(1024):
B = T[s].reshape((32, 32))
B_rev = B[..., ::-1]
stacked[...,s] = B_rev
您也可以使用一个衬垫一步完成此操作
stacked = T.reshape((1024,32,32)).transpose((1,2,0))[:,::-1]
这种方法应该是首选,因为在一些简短的基准测试中我发现它比普通的 python 循环快 很多 (1000x)。
我有一个脚本可以将 1024x1024 矩阵重塑为 32x32 矩阵。这是代码:
import numpy as np
filename = r'bb1e03'
background = r'bb1e03_background'
size = 1024
resize = 32
n = np.arange(size)
T0 = np.loadtxt(filename, unpack=False)
bg = np.loadtxt(background, unpack=False)
T = T0-bg
for s in n: # s here is the row number
B = np.reshape(T[s], (resize, resize))
B_rev = B[...,::-1]
name = str(filename) + '_column_'+ str.zfill(str(s), 4)
np.savetxt(name+'.txt', B_rev)
现在我需要堆叠所有 32x32 矩阵,以便最终得到一个 32x32x1024 矩阵。你能告诉我我该怎么做吗?我发现 np.dstack 可以完成这项工作,但我不知道如何将它包含在脚本中。
谢谢。
由于 np.dstack
需要所有矩阵的元组来堆叠,所以无论如何都必须单独存储它们。
解决您的问题的一个简单方法是在生成重塑矩阵时将它们放置在堆叠结构中。
stacked = np.empty((32, 32, 1024))
for s in xrange(1024):
B = T[s].reshape((32, 32))
B_rev = B[..., ::-1]
stacked[...,s] = B_rev
您也可以使用一个衬垫一步完成此操作
stacked = T.reshape((1024,32,32)).transpose((1,2,0))[:,::-1]
这种方法应该是首选,因为在一些简短的基准测试中我发现它比普通的 python 循环快 很多 (1000x)。