栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我如何在类似于Matlab的blkproc(blockproc)函数的块中高效处理numpy数组

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我如何在类似于Matlab的blkproc(blockproc)函数的块中高效处理numpy数组

以下是使用块的另一种(无循环)方法的示例:

import numpy as npfrom numpy.lib.stride_tricks import as_strided as astA= np.arange(36).reshape(6, 6)print A#[[ 0  1  2  3  4  5]# [ 6  7  8  9 10 11]# ...# [30 31 32 33 34 35]]# 2x2 block viewB= ast(A, shape= (3, 3, 2, 2), strides= (48, 8, 24, 4))print B[1, 1]#[[14 15]# [20 21]]# for preserving original shapeB[:, :]= np.dot(B[:, :], np.array([[0, 1], [1, 0]]))print A#[[ 1  0  3  2  5  4]# [ 7  6  9  8 11 10]# ...# [31 30 33 32 35 34]]print B[1, 1]#[[15 14]# [21 20]]# for reducing shape, processing in 3D is enoughC= B.reshape(3, 3, -1)print C.sum(-1)#[[ 14  22  30]# [ 62  70  78]# [110 118 126]]

因此,仅尝试简单地将

matlab
功能复制到
numpy
并不是所有最佳方式。有时需要“脱帽而出”的思维。

注意
通常,基于跨步技巧的实现 可能会
(但不一定需要)遭受一些性能损失。因此,请做好准备以各种方式衡量您的表现。无论如何,明智的做法是先检查所需的功能(或足够相似,以便轻松适应)是否已在

numpy
或中实现
scipy


更新
请注意,这里没有

magic
涉及任何实际内容
strides
,因此我将提供一个简单的函数来获取
block_view
任何合适的2D
numpy
数组。所以我们开始:

from numpy.lib.stride_tricks import as_strided as astdef block_view(A, block= (3, 3)):    """Provide a 2D block view to 2D array. No error checking made.    Therefore meaningful (as implemented) only for blocks strictly    compatible with the shape of A."""    # simple shape and strides computations may seem at first strange    # unless one is able to recognize the 'tuple additions' involved ;-)    shape= (A.shape[0]/ block[0], A.shape[1]/ block[1])+ block    strides= (block[0]* A.strides[0], block[1]* A.strides[1])+ A.strides    return ast(A, shape= shape, strides= strides)if __name__ == '__main__':    from numpy import arange    A= arange(144).reshape(12, 12)    print block_view(A)[0, 0]    #[[ 0  1  2]    # [12 13 14]    # [24 25 26]]    print block_view(A, (2, 6))[0, 0]    #[[ 0  1  2  3  4  5]    # [12 13 14 15 16 17]]    print block_view(A, (3, 12))[0, 0]    #[[ 0  1  2  3  4  5  6  7  8  9 10 11]    # [12 13 14 15 16 17 18 19 20 21 22 23]    # [24 25 26 27 28 29 30 31 32 33 34 35]]


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637674.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号