Rafael Zottesso
Rafael Zottesso

Reputation: 1594

Store and find higher value index in a numpy array

I used numpy.loadtxt to load a file that contains this scructure:

99  0           1           2           3           ...     n
46  0.137673    0.147241    0.130374    0.155461    ...     0.192291
32  0.242157    0.186015    0.153261    0.152680    ...     0.154239
77  0.163889    0.176748    0.184754    0.126667    ...     0.191237
12  0.139989    0.417530    0.148208    0.188872    ...     0.141071 
64  0.172326    0.172623    0.196263    0.152864    ...     0.168985
50  0.145201    0.156627    0.214384    0.123387    ...     0.187624
92  0.127143    0.133587    0.133994    0.198704    ...     0.161480

Now, I need that the first column (except first line) store the index of the higher value in it's line.

At end, save this array in a file with the same number format as original.

Thank's.

Upvotes: 0

Views: 119

Answers (2)

B. M.
B. M.

Reputation: 18628

Your data look like a Dataframe with columns and index : the data type is not homogeneous. It is more convenient to do it with pandas, which manage natively this layout:

import pandas as pd
a=pd.DataFrame.from_csv('data.txt',sep=' *')
u=a.set_index(a.values.argmax(axis=1)).to_string()
with open('out.txt','w') as f : f.write(u)

then out.txt is

          0         1         2         3         4
4  0.137673  0.147241  0.130374  0.155461  0.192291
0  0.242157  0.186015  0.153261  0.152680  0.154239
4  0.163889  0.176748  0.184754  0.126667  0.191237
1  0.139989  0.417530  0.148208  0.188872  0.141071
2  0.172326  0.172623  0.196263  0.152864  0.168985
2  0.145201  0.156627  0.214384  0.123387  0.187624
3  0.127143  0.133587  0.133994  0.198704  0.161480

Upvotes: 1

lobudge
lobudge

Reputation: 171

Can you use numpy.argmax something like this:

import numpy as np

# This is a simple example. In your case, A is loaded with np.loadtxt
A = np.array([[1, 2.0, 3.0], [3, 1.0, 2.0], [2.0, 4.0, 3.0]])
B = A.copy()

# Copy the max indices of rows of A into first column of B
B[:,0] = np.argmax(A[:,1:], 1)

# Save the results using np.savetxt with fmt, dynamically generating the
# format string based on the number of columns in B (setting the first
# column to integer and the rest to float)
np.savetxt('/path/to/output.txt', B, fmt='%d' + ' %f' * (B.shape[1]-1))

Note that np.savetxt allows for formatting.

This example code doesn't address the fact that you want to skip the first row, and you might want to subtract 1 from the results of np.argmax depending on if the index into the remaining columns is inclusive of the index column (0) or not.

Upvotes: 3

Related Questions