将网格从文本文件转换为具有一致轴坐标的numpy多维数组

2024-10-02 08:21:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道是否有人能帮我解决这个问题,我可以在二维空间处理这个问题。。。但是没有了

我使用文本文件将数据网格存储为表格。每列代表一个轴坐标值,但最后一列是实际数据

此代码生成从文本文件加载的二维数组示例:

import numpy as np


def function_a(a, b, c, d):
    return a + b + c + d/100000


w = np.arange(6.0, 9.0, 0.5)
x = np.arange(1, 1000, 200)
y = np.arange(-4.0, -1.5, 0.5)
z = np.arange(1e6, 1e7, 1e6)

file_matrix = np.zeros((w.size*x.size*y.size*z.size, 5))
i = 0
for w_value in w:
    for x_value in x:
        for y_value in y:
            for z_value in z:
                file_matrix[i, 0] = w_value
                file_matrix[i, 1] = x_value
                file_matrix[i, 2] = y_value
                file_matrix[i, 3] = z_value
                file_matrix[i, 4] = function_a(w_value, x_value, y_value, z_value)
                i += 1

print(file_matrix)

正如您在该表中所看到的,每个列坐标都有不同的“步进速度”,第一列的值变化比第二列慢,因此对于每个后续列坐标。最后一个在每行发生变化:

[[ 6.000e+00  1.000e+00 -4.000e+00  1.000e+06  1.300e+01]
 [ 6.000e+00  1.000e+00 -4.000e+00  2.000e+06  2.300e+01]
 [ 6.000e+00  1.000e+00 -4.000e+00  3.000e+06  3.300e+01]
 ...
 [ 8.500e+00  8.010e+02 -2.000e+00  7.000e+06  8.775e+02]
 [ 8.500e+00  8.010e+02 -2.000e+00  8.000e+06  8.875e+02]
 [ 8.500e+00  8.010e+02 -2.000e+00  9.000e+06  8.975e+02]]

我想把这个矩阵重塑成一个4维数组(我们称之为file_mdimArray),考虑w,x,y,z数组的轴增量。以便:

file_mdimArray[a, b, c, d] = function_a(w[a], x[b], y[c], z[d])

谢谢你的建议


Tags: 数据in网格forsizevaluenp空间
1条回答
网友
1楼 · 发布于 2024-10-02 08:21:49

正如我在下面的代码中所示,您可以重塑数组的形状,以达到您描述的形状

file_mdimArray = file_matrix[:, 4].reshape(len(w), len(x), len(y), len(z))

我还建议您更改计算数组文件\u矩阵的方式。通过使用numpy提供的工具,您可以不使用循环来完成这项工作

ww, xx, yy, zz = np.meshgrid(w, x, y, z, indexing='ij')
ww, xx, yy, zz = [i.flatten() for i in [ww, xx, yy, zz]]
file_matrix = np.stack([ww, xx, yy, zz, function_a(ww, xx, yy, zz)])

相关问题 更多 >

    热门问题