【问题标题】:Error 'numpy.int32' object does not support item assignment错误“numpy.int32”对象不支持项目分配
【发布时间】:2015-06-07 23:37:31
【问题描述】:

我收到这个错误

Traceback (most recent call last):
File "C:\Users\User1\Desktop\cellh5_scripts\ewa_pnas_fate.py", line 90,     in <module>
ec.combine_classifiers("Event labels combined")
File "C:\Users\User1\Desktop\cellh5_scripts\ewa_pnas_fate.py", line 53, in combine_classifiers
pnas_class[pnas_class==3] = 1
TypeError: 'numpy.int32' object does not support item assignment

通过运行代码

def combine_classifiers(self, output_name):
    all_combined_classes = []
    for _, (plate_name, w, p, t1, t2, track_ids, track_labels) in self.mapping[['Plate', 
                                                                        'Well', 
                                                                        'Site', 
                                                                        'Gene Symbol',
                                                                        'siRNA ID', 
                                                                        'Event track ids',
                                                                        'Event track labels']].iterrows(): 
        combined_classes = []
        ch5_file_handle = self.cellh5_handles[plate_name]
        ch5_pos = ch5_file_handle.get_position(w, str(p))



        for track_id, track_label in zip(track_ids, track_labels):

            h2b_class = track_label.copy()
            print(track_id)
            pnas_class = ch5_pos.get_class_prediction('secondary__expanded')[track_id]['label_idx'] + 1
            print(pnas_class)


            inter_idx = h2b_class == 1 
            pnas_class[pnas_class==3] = 1
            pnas_class[pnas_class==2]+=2
            combined_class = h2b_class
            combined_class[inter_idx] = pnas_class[inter_idx] 
            combined_classes.append(combined_class)

        all_combined_classes.append(combined_classes)

    self.mapping[output_name] = pandas.Series(all_combined_classes) 

我打印 pnas_class 为 1,track_id 为 50708。我想知道代码设计者想要在该部分中做什么:

inter_idx = h2b_class == 1 
pnas_class[pnas_class==3] = 1
pnas_class[pnas_class==2]+=2
combined_class = h2b_class
combined_class[inter_idx] = pnas_class[inter_idx] 

我怎样才能将其更改为具有相同的含义?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    pnas_class 是一个整数,因此您无法从[pnas_class==3] = 1 的整数中选择项目。

    如果 1 等于 3,您可能正试图影响 1 到 pnas_class。在这种情况下,试试这个:

    pnas_class= 1*(pnas_class == 3) + pnas_class*(pnas_class != 3 )
    

    【讨论】:

      【解决方案2】:

      好的,我发现了错误。你说得对,pnas_class 不应该是整数,我知道为什么它是整数而不是数组。

      【讨论】:

        猜你喜欢
        • 2012-01-22
        • 2017-11-18
        • 2018-09-02
        • 1970-01-01
        • 1970-01-01
        • 2021-02-16
        • 2015-12-22
        • 2023-03-15
        • 1970-01-01
        相关资源
        最近更新 更多