python - 用步幅组成 numpy 数组

标签 python arrays numpy

我有一个数组 A1_ijk 并希望将其广播到 A2_ijmnk,但仅限于 m=n 的情况。否则,A2 应该用零填充。当然,我可以创建新的空数组并用 A1 填充它,如下所示:

import numpy as np
A1 = np.random.rand(100, 5, 3)
A2 = np.zeros((100, 5, 2, 2, 3))
A2[..., 0, 0, :] = A1
A2[..., 1, 1, :] = A1

但是我觉得这可以通过更有效的方式来完成。我尝试了as_strided:

as_strided = np.lib.stride_tricks.as_strided
sz = A1.itemsize
A2 = as_strided(A1, shape=(100,5,2,2,3), strides=(5*3*sz, 3*sz, 0, 0, sz))

还有broadcast_to:

broadcast_to = np.lib.stride_tricks.broadcast_to
A2=broadcast_to(A1[...,None,None,:], (100,5,2,2,3))

不幸的是,这两种方法都用 A1 值填充所有 m, n 对。

我的问题是,是否可以使用步幅创建我需要的形状数组,而无需实际复制数据?

最佳答案

My question is if this is possible to use strides to create the array of the shape i need using strides and without actual copying data?

事实并非如此。作为查看此问题的简单方法,请考虑如果您的数组中没有零,则该数组的任何可能 View 都不会为您提供所需的非对角零。

关于python - 用步幅组成 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36802062/

相关文章:

python - 具有相同形状的 numpy 数组列表中值的元素聚合(平均值)

python - 从 gdal ReadAsArray 返回的 numpy 数组中的值的范围是多少?

php - 我想用 mysql_real_escape_string() 函数检查数组的数据

php - 如何操作多维数组

python - 反转二进制 numpy 数组

python - 如何规范化 numpy(实数)傅里叶变换的频谱,以便应用 parseval 定理?

python - 如何在 CPLEX Python 中实现逻辑 OR 约束

python - 如何有效地将特定号码匹配到号码集中?

Python plotly : remove empty spaces from bar chart

c++ - 多维数组 C++ 产生奇怪的值