【问题标题】:Too many indices for array when using mask使用掩码时数组的索引过多
【发布时间】:2021-07-13 22:12:51
【问题描述】:

我得到了主题 IndexError,但我不知道为什么,因为我检查了所涉及数组的 形状 并且它们匹配。

首先,在我的代码中,我创建了一个转置处理的数组,以便获得 year_receventvalue。生成 369563 行和 3 列的数组。

maxevent_arr = np.array([year_rec, event, value])
maxevent_arr = maxevent_arr.transpose()
print("maxevent_arr[1590:1595]= \n", maxevent_arr[1590:1595])
print("shape(maxevent_arr)= ", maxevent_arr.shape)

产生:

maxevent_arr[1590:1595]= 
 [[1.964e+03 3.000e+01 5.000e-01]
  [1.964e+03 3.000e+01 3.000e+00]
  [1.964e+03 3.000e+01 4.500e+00]
  [1.964e+03 3.000e+01 7.500e+00]
  [1.964e+03 3.000e+01 8.800e+00]]

shape(maxevent_arr)=  (369563, 3)

然后我创建了一个名为 mask_yr 的掩码,它用 1964 年标识这些索引。后来我将这个掩码重新调整为相同数量的元素和 1 列,正如人们所期望的那样。我这样做是因为没有这一步,我的形状是 (369563,),即没有可识别的列..

mask_yr = maxevent_arr[:, 0] == 1964
mask_yr = np.reshape(mask_yr, (maxevent_arr.shape[0], 1))
print('mask_yr[:5]: \n', mask_yr[:5])
print("shape(mask_yr) = ", mask_yr.shape)

产生:

mask_yr[:5]: 
 [[ True]
 [ True]
 [ True]
 [ True]
 [ True]]
shape(mask_yr) =  (369563, 1)     # this looks ok. 

最后,我对所有列应用相同的掩码以获取每一行的相应值。

mask_rain = maxevent_arr[:, mask_yr]
print('mask_rain[1590:1595]: \n', mask_rain[1590:1595])

这是我得到 IndexError 的地方:

Traceback (most recent call last):
File "C:\1_Earthfx\Python\hourly_rain\rain_analysis.py", line 150, in <module>
    mask_rain = maxevent_arr[:, mask_yr]
IndexError: too many indices for array

知道这是关于什么的吗? maxevent_arr 的维度 0 与 mask_yr....

中的维度相匹配

【问题讨论】:

  • 您在哪里拥有maxevent_arr[:, mask_yr],用您自己的话说:您希望maxevent_arr 拥有多少维度?当您使用[:, x] 索引具有这么多维度的数组时,其中x 是掩码,您认为x 应该有多少维度? (为什么?)现在,mask_yr 有多少个维度?

标签: python mask


【解决方案1】:

不需要重新调整布尔掩码的形状,因为它具有所需的尺寸。
所以不需要这行代码:

mask_yr = np.reshape(mask_yr, (maxevent_arr.shape[0], 1))

当然,下面的更改也是必需的:

mask_rain = maxevent_arr[:, mask_yr]   # to be changed to

mask_rain = maxevent_arr[mask_yr, :]

@Karl Knechtel 你看,不需要无所不知的无用 cmets!

【讨论】:

    猜你喜欢
    • 2022-07-27
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 2020-02-14
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多