gpt4 book ai didi

python - 切片数组的 IndexError

转载 作者:行者123 更新时间:2023-11-28 17:08:19 25 4
gpt4 key购买 nike

我想我是在问一个新手问题,但今天花了太多时间寻找答案。在使用 np.genfromtxt 保存和重新加载后天真地尝试对 numpy 数组执行相同的切片操作时,我收到了 IndexError: too many indices for array 错误。

注意:我看到尺寸在重新加载时从 (3,6) 变为 (3,),但无法将结果转换回尺寸 (3,6) - 这是我认为必须显而易见的部分(或者我可能需要以不同的方式指定类型)

yo = np.arange(18)
yo = yo.reshape(3,6)

print(yo)
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]
[12 13 14 15 16 17]]

print(yo[:,:2])
[[ 0 1]
[ 6 7]
[12 13]]

np.savetxt("test_data.csv", yo, delimiter=",", fmt='%1.4e')
yo_reloaded = np.genfromtxt("test_data.csv", dtype=(float, float, float, float, float, float), delimiter = ",")

#same as above but doesn't work
print(yo_reloaded[:,:2])
IndexError: too many indices for array

print(yo_reloaded)
[( 0., 1., 2., 3., 4., 5.) ( 6., 7., 8., 9., 10., 11.)
( 12., 13., 14., 15., 16., 17.)]

# shape changed
print(yo_reloaded.shape)
(3,)

最佳答案

使用dtype=None 告诉genfromtxt 尝试智能地猜测dtype。在这种情况下,由于所有值都是 float ,genfromtxt 将为数组分配一个 float 据类型:

In [19]: yo_reloaded = np.genfromtxt("test_data.csv", dtype=None, delimiter = ",")
In [21]: yo_reloaded.dtype
Out[21]: dtype('float64')

yo_reload 的形状为 (3,6)

相反,如果设置 dtype=(float, float, float, float, float, float):

yo_reloaded = np.genfromtxt("test_data.csv", dtype=(float, float, float, float, float, float), delimiter = ",")

然后 yo_reloaded.dtype 变成:

In [18]: yo_reloaded.dtype
Out[18]: dtype([('f0', '<f8'), ('f1', '<f8'), ('f2', '<f8'), ('f3', '<f8'), ('f4', '<f8'), ('f5', '<f8')])

这是 structured array 的 dtype .结构化数组的形状是 (3,) 成为 NumPy 将此数组视为由 3 行组成,每行具有由 6 个 float 据类型字段组成的单个值。这根本不是您想要的,而是当您将 dtype 设置为等于类型元组时得到的。

请注意,您还可以使用 dtype=float 获取所需的数组:

In [24]: yo_reloaded = np.genfromtxt("test_data.csv", dtype=float, delimiter = ",")
In [25]: yo_reloaded.shape
Out[25]: (3, 6)
In [26]: yo_reloaded.dtype
Out[26]: dtype('float64')

或者,作为 hpaulj points out ,您可以完全省略 dtype 参数,在这种情况下它默认为 dtype=float

关于python - 切片数组的 IndexError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49602197/

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