python重新排列数组_有效地重塑/重新排序Numpy数组,使其具有正确的排列顺序(图像)...

我希望能够以某种方式重新排序numpy数组,以便高效地处理分片。在

我得到的是:>>> A = np.array([[1,2],[3,4]]).repeat(2,0).repeat(2,1)

>>> A # image like array

array([[[1, 1, 2, 2],

[1, 1, 2, 2]],

[[3, 3, 4, 4],

[3, 3, 4, 4]]])

>>> A.reshape(2,2,4)

array([[[1, 1, 2, 2],

[1, 1, 2, 2]],

[[3, 3, 4, 4],

[3, 3, 4, 4]]])

我想要的:如何获得X:

^{pr2}$

如果没有慢python循环,这是可能的吗?在

额外奖励:从X转换回A

为什么这么麻烦?能够做一些类似的事情:>>> X[X.sum(2)>12] -= 1

>>> X

array([[[1, 1, 1, 1],

[2, 2, 2, 2]],

[[3, 3, 3, 3],

[3, 3, 3, 3]]])

编辑:解决方案:# MIT - License

import numpy as np

def tile_reorder(A, t):

"""reshape and transpose quadratic array for easy access to quadratic tiles of size t"""

l = A.shape[0] / t

X = A.reshape((l, t, l, t))

X = X.transpose([0, 2, 1, 3])

return X

def tile_reorder_reverse(X):

l = X.shape[0] * X.shape[2]

A = X.transpose([0, 2, 1, 3])

A = A.reshape((l, l))

return A

if __name__ == "__main__":

A = np.array([[1,2,3],[3,4,5],[6,7,8]]).repeat(4,0).repeat(4,1)

print "A:\n", A, "\n\n"

print "A_tiled:\n", tile_reorder(A,4), "\n\n"

print "A_tiled_reversed:\n", tile_reorder_reverse(tile_reorder(A,4)), "\n\n"

X = tile_reorder(A,4)

X[X.sum((2)).sum(2)>63,:,:] += 10

B = tile_reorder_reverse(X)

print "B_processed:\n", B, "\n\n"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值