ewilulu
ewilulu

Reputation: 193

Error 'numpy.int32' object does not support item assignment

I get this error

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

by runing the code

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) 

I print pnas_class which is 1, and track_id which is 50708. I'm wondering what the designer of code want to do in the part:

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] 

How can I change that to have the same meaning?

Upvotes: 2

Views: 11541

Answers (2)

ewilulu
ewilulu

Reputation: 193

Ok I found the mistake. You arer right the pnas_class should not be an integer and I know why is it integer instead of array.

Upvotes: 0

farhawa
farhawa

Reputation: 10398

pnas_class is a an integer so you can't select item from an integer by [pnas_class==3] = 1.

Maybe you are trying to affect 1 to pnas_class if it's equal to 3. In this case try this:

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

Upvotes: 2

Related Questions