numpy python zip_numpy:压缩块矩阵

我能想到的最直接的方法是将矩阵转换为一维数组,然后为分区组索引X和{}创建相应的数组,尽管可能不是最有效的(尤其是当矩阵很大时)。然后,您可以按分区分组索引分组,最后将矩阵重新构造为其原始形式。在

例如,如果矩阵是>>> M1 = np.arange(25).reshape((5,5))

>>> M1

array([[ 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]])

你的分区是

^{pr2}$

从这一点来看,有几种方法可以实现重塑和后续分组。你可以在每一行的cd3}上为每一行建立索引。在>>> st = pd.DataFrame(M1).stack().to_frame('M1')

>>> st

M1

0 0 0

1 1

2 2

3 3

4 4

1 0 5

...

4 3 23

4 24

(为了可读性,我截断了输出,如果您想查看其余示例的输出,我相信您可以自己评估这些示例的其余部分。)然后可以添加表示分区组索引的列:>>> st['X'] = f(st.index.get_level_values(0))

>>> st['Y'] = g(st.index.get_level_values(1))

然后,您可以按这些指数分组,并应用您选择的聚合函数。在>>> stp = st.groupby(['X', 'Y']).agg(p)

您必须定义p(或找到一个现有的定义),以便它接受一维Numpy数组并返回单个数字。如果您想使用sum(),那么可以使用st.groupby(...).sum(),因为Pandas内置了对该函数和其他一些标准函数的支持,但是agg是通用的,适用于您可以提供的任何缩减函数p。在

最后,unstack()方法将数据帧转换回正确的2D“矩阵形式”,然后如果需要,可以使用as_matrix()方法将其转换回纯Numpy数组。在>>> M3 = stp.unstack().as_matrix()

>>> M3

array([[ 15, 63, 27],

[ 35, 117, 43]])

如果你不想引进熊猫,其他图书馆也会这么做。例如,您可能会看到numpy-groupies,但在我编写本文时,它似乎只与python2兼容。然而,我还没有找到任何一个真正的二维分组的库,如果你处理的是非常大的矩阵,那么你可能需要这个库,因为如果你有另外的2到3个副本,那么就要占用可用的内存了。在

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果您想对Numpy进行无损解压缩,可以使用Pythonzipfile模提供的工具。这个模允许您创建、读取、写入、追加和列出ZIP文件。首先,您需要导入zipfile模和os模。然后,您可以指定压缩包的路径(src_path)和解压后文件的存放路径(target_path)。接下来,您可以使用zipfile.ZipFile()函数打开压缩包,并使用extractall()函数将所有文件解压到目标路径。最后,记得关闭压缩包。下面是一个示例代码: import zipfile import os src_path = r"\chrome\chromedriver_win32.zip" target_path = "\chrome\数据" if(not os.path.isdir(target_path)): z = zipfile.ZipFile(src_path, 'r') z.extractall(path=target_path) z.close() 这段代码将会把指定的压缩包(src_path)中的文件解压到目标路径(target_path)中。注意,您需要将压缩包的路径和目标路径替换为您实际的路径。希望这个回答对您有帮助。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python解压zip压缩包到指定文件路径](https://blog.csdn.net/qq_45176548/article/details/116327526)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Python 使用Numpy矩阵进行转置的方法](https://download.csdn.net/download/weixin_38693192/12864784)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [jpeg 彩色图像压缩python实现)](https://blog.csdn.net/qq_41137110/article/details/130456167)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值