我有一个尺寸为1000x1000的二维数组,本质上是一个函数f(i,j)= z
如果我打印2d_arry,输出为:
array([[-0.07742694, -0.07745034, -0.07733458, ..., -2.85293312,
-2.42345613, -1.77578657],
[-0.08085247, -0.07929061, -0.07798724, ..., -2.73660511,
-2.42752028, -1.96700638],
[-0.08214564, -0.07995017, -0.07815817, ..., -2.64891561,
-2.44130638, -2.13800253],
...,
[-0.08825558, -0.08523855, -0.08262335, ..., -2.56719269,
-2.61402861, -2.676069 ],
[-0.08976864, -0.08709842, -0.08465978, ..., -2.50407402,
-2.55825523, -2.62750258],
[-0.09124844, -0.08912922, -0.08699924, ..., -2.42643301,
-2.48579906, -2.55861256]])
我想要一个具有(i,j,z)分量的3D阵列。我需要保存格式为x,y,z的文件。
那会是这样的:
0 0 -0.07742694
0 1 -0.07745034
0 2 -0.07733458
... ... ...
Nx Ny -2.55861256
我可以使用嵌套循环来执行此操作,但是如果我的数组较大,则可能需要一些时间。 有没有更简单/更快的方法?
答案 0 :(得分:1)
我认为这可行...
import pandas as pd
import numpy as np
data = ([[-0.07742694, -0.07745034, -0.07733458, -2.85293312,
-2.42345613, -1.77578657],
[-0.08085247, -0.07929061, -0.07798724, -2.73660511,
-2.42752028, -1.96700638],
[-0.08214564, -0.07995017, -0.07815817, -2.64891561,
-2.44130638, -2.13800253],
[-0.08825558, -0.08523855, -0.08262335, -2.56719269,
-2.61402861, -2.676069 ],
[-0.08976864, -0.08709842, -0.08465978, -2.50407402,
-2.55825523, -2.62750258],
[-0.09124844, -0.08912922, -0.08699924, -2.42643301,
-2.48579906, -2.55861256]])
df = pd.DataFrame(data=data)
n_elements = df.shape[0] * df.shape[1]
values = list(df.values.reshape([n_elements,]))
repeated_index = list(df.index.repeat(len(df.columns)))
columns = list(df.columns) * len(df.index)
new_data = np.stack([repeated_index, columns, values])
df_final = pd.DataFrame(new_data.T,
columns=['i', 'j', 'z'])
df_final = df_final.astype({'i': 'int32', 'j':'int32'})
df_final.to_csv('./output.csv', header=False, index=False)