gpt4 book ai didi

python - 存储 2D 数据的最佳方式是什么

转载 作者:行者123 更新时间:2023-11-28 21:20:50 27 4
gpt4 key购买 nike

我使用的是 Python2.7。

我有一个像这样的二维数组:

[[ 0, 12,  6, -1, -1, -1, -1, -1],
[57, 69, 68, 67, 75, -1, -1, -1],
[19, 21, -1, -1, -1, -1, -1, -1],
[ 1, 18, 19, 11, 5, -1, -1, -1],
[16, 9, 10, -1, -1, -1, -1, -1],
[-1, -1, -1, -1, -1, -1, -1, -1],
[-1, -1, -1, -1, -1, -1, -1, -1],
[54, 66, 65, -1, -1, -1, -1, -1]]

-1 只是空节点的标志。

我需要搜索数组的元素、操作元素并更新数组一千次。到目前为止数组很小,当大小增加到 8*500 时。操作将非常耗费时间和内存。

这样存储数组有什么好处吗?

[[26, 12, 6],
[57, 69, 68, 67, 75],
[19, 21],
[28, 18, 19, 11, 5],
[16, 9, 10],
[54, 66, 65]]

这样,在数据操作过程中,我需要做追加或删除。

存储数据的最佳方式是什么?非常感谢

最佳答案

对于 numpy 掩码数组或 pandas DataFrame,这是一个很好的例子。原因如下:

import numpy as np
import pandas

# plain numpy arrays don't know what -1 actually means
myArr = np.array([
[0, 12, 6, -1, -1, -1, -1, -1],
[57, 69, 68, 67, 75, -1, -1, -1],
[19, 21, -1, -1, -1, -1, -1, -1],
[1, 18, 19, 11, 5, -1, -1, -1],
[16, 9, 10, -1, -1, -1, -1, -1],
[-1, -1, -1, -1, -1, -1, -1, -1],
[-1, -1, -1, -1, -1, -1, -1, -1],
[54, 66, 65, -1, -1, -1, -1, -1]
])
print(myArr.mean(axis=1))
[ 1.625 41.625 4.25 6.375 3.75 -1. -1. 22.5 ]

# masked arrays do (if you tell them)
myMArr = np.ma.masked_equal(myArr, -1)
print(myMArr.mean(axis=1))
[6.0 67.2 20.0 10.8 11.666666666666666 -- -- 61.666666666666664]

# and so do dataframes
myDF = pandas.DataFrame(myMArr)
print(myDF.mean(axis=1))

0 6.000000
1 67.200000
2 20.000000
3 10.800000
4 11.666667
5 NaN
6 NaN
7 61.666667
dtype: float64

与掩码数组相比,我更喜欢数据帧。最明显的原因是默认的 REPR

掩码数组:

masked_array(data =
[[0 12 6 -- -- -- -- --]
[57 69 68 67 75 -- -- --]
[19 21 -- -- -- -- -- --]
[1 18 19 11 5 -- -- --]
[16 9 10 -- -- -- -- --]
[-- -- -- -- -- -- -- --]
[-- -- -- -- -- -- -- --]
[54 66 65 -- -- -- -- --]],
mask =
[[False False False True True True True True]
[False False False False False True True True]
[False False True True True True True True]
[False False False False False True True True]
[False False False True True True True True]
[ True True True True True True True True]
[ True True True True True True True True]
[False False False True True True True True]],
fill_value = -1)

数据框(文字版):

    0   1   2   3   4   5   6   7
0 0 12 6 NaN NaN NaN NaN NaN
1 57 69 68 67 75 NaN NaN NaN
2 19 21 NaN NaN NaN NaN NaN NaN
3 1 18 19 11 5 NaN NaN NaN
4 16 9 10 NaN NaN NaN NaN NaN
5 NaN NaN NaN NaN NaN NaN NaN NaN
6 NaN NaN NaN NaN NaN NaN NaN NaN
7 54 66 65 NaN NaN NaN NaN NaN

在 IPython Notebook 中,您会得到一个很好的数据帧 HTML REPR: enter image description here

关于python - 存储 2D 数据的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22255929/

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