什么是最快且最符合Python风格的方法,可以在不过采样较小数组的情况下执行不同大小数组的元素逐个操作?
例如: 我有一个大数组A 1000x1000和一个小数组B 10x10,我想让B中的每个元素响应于A中的100x100个元素。没有任何插值的必要,只需为所有10000次操作使用B中相同的元素。
我可以调整两个数组的大小,使A的形状成为B的倍数。在所有维度上它们通常是1:10000或1:1000。这些数组表示具有不同分辨率但相同范围的数据样本。
我知道可以通过使用Kronecker乘积等方式过采样数组B,但保持数组B小会更好,特别是因为我的某些数组处理和存储非常大。我使用xarray和dask,但任何numpy操作也都适用。
希望这段摘录能够解释我想做什么:
例如: 我有一个大数组A 1000x1000和一个小数组B 10x10,我想让B中的每个元素响应于A中的100x100个元素。没有任何插值的必要,只需为所有10000次操作使用B中相同的元素。
我可以调整两个数组的大小,使A的形状成为B的倍数。在所有维度上它们通常是1:10000或1:1000。这些数组表示具有不同分辨率但相同范围的数据样本。
我知道可以通过使用Kronecker乘积等方式过采样数组B,但保持数组B小会更好,特别是因为我的某些数组处理和存储非常大。我使用xarray和dask,但任何numpy操作也都适用。
希望这段摘录能够解释我想做什么:
import numpy as np
A = np.random.rand(10,10)
B = np.random.rand(1000,1000)
res = np.shape(B)[0]//np.shape(A)[0]
#I want to add A and B so that each element in A is added to 100x100 elements in B.
#This doesn't work of obvious reasons:
#C = A+B
#This solution sacrifices the resolution of B:
C = A+B[::res,::res]
#These solutions creates an unnecessary large array for the operation(don't they?):
K = np.ones((res,res))
C = np.kron(A, K) + B
C = np.repeat(np.repeat(A,res, axis=0), res, axis=1)+B
我有一种感觉,这个问题以前可能已经出现过了,但我没有找到任何一个适用于这种特殊情况的答案。
如何检查一个二维NumPy数组是否包含特定值模式
相关。 - Divakar