gpt4 book ai didi

python - 如何将 2D numpy 数组的 2D numpy 数组重构为 4D float 组?

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:53 27 4
gpt4 key购买 nike

我目前有一个问题,我有一个形状为 (60,60) 的 numpy 数组,其中每个点本身就是一个形状为 (11,11) 的 numpy 数组。这给我带来了问题,因为 (60,60) 数组的每个点都是一个对象而不是 float :

    P_arr.shape
(60,60)
P_arr[i,j].shape
(11,11)
P_arr[i,j][k,l]
1.0

对于稍后需要执行的矩阵运算,我需要以特定顺序访问数组的每个浮点值。我需要一个形状为 (11,11,60,60) 的新数组,每个点都是 float 。理想情况下,我希望达到这一点:

    New_P_arr[k,l,i,j]
1.0

有什么方法可以从内部二维数组中提取浮点值,并将其 reshape 为所需的形式吗?我需要一个比循环更快的解决方案,因为这将来会扩展很多。我尝试过展平、vstack、连接等。例如,展平的问题是这样的:

    New_P_arr = np.concatenate(P_arr)
New_P_arr.shape
(3600,)
New_P_arr[i].shape
(11,11)

因此,展平数组(或其他操作)将不允许我访问单个方括号索引内的所有值。我最初的想法是展平数组以 reshape 它的形状,但因为点是对象而不是 float ,所以也不起作用。

编辑:这是我生成 P_arr 的方法。我需要求解关联的勒让德函数,以在形状为 (60,60) 的 theta 值网格上选择 11 l 和 11 m 值。 Scipy 有一个包 lpmn,它计算关联的勒让德多项式及其导数(我不需要),但它不是矢量化的。它为每个 l 和 m 的给定 theta 值返回一个 (11,11) 数组,直到我输入的值(从 0 到 10,这就是 11 的来源)。这是代码:

    import numpy as np
from scipy.special import lpmn
lmax = 10
mmax = lmax
theta = np.arange(0, 180., 3)
theta = theta*np.pi/180.
phi = theta
ph, th = np.meshgrid(theta, phi)
cos_th = np.cos(th)
th is a (60,60) array of theta values from 0-pi in equal steps

@np.vectorize
def asscP(m, l, cos_theta):
return lpmn(m, l, cos_theta)[0]

asscP = np.vectorize(asscP, excluded={0,1}, otypes=[np.ndarray])
P_arr = asscP(mmax, lmax, cos_th)

最佳答案

  • 您可以先堆叠内部层,然后再堆叠外部层。
>>>new_P_arr = np.stack([np.stack(p) for x in P_arr])
>>>new_P_arr.shape
(60,60,11,11)

关于python - 如何将 2D numpy 数组的 2D numpy 数组重构为 4D float 组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57699363/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com