Van een tekstbestand dat drie kolommen met gegevens bevat, wil ik in staat zijn om gewoon een slice
gegevens te nemen van alle drie de kolommen waarbij de waarden in de eerste kolom gelijk zijn aan de waarden die zijn gedefinieerd in above
. Vervolgens wil ik het gegevenssegment in een nieuwe array met de naam slice
plaatsen (ik gebruik Python 2.7)
above = range(18000, 18060, 5)
data = np.loadtxt(open('data.txt'), delimiter=None)
energies = (np.hsplit(data, 3))[0]
slice = set(energies)&set(above)
Het bovenstaande komt terug met:
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
set(energies)&set(above)
TypeError: unhashable type: 'numpy.ndarray
Antwoord 1, autoriteit 100%
Uw variabele energies
heeft waarschijnlijk de verkeerde vorm:
>>> from numpy import array
>>> set([1,2,3]) & set(range(2, 10))
set([2, 3])
>>> set(array([1,2,3])) & set(range(2,10))
set([2, 3])
>>> set(array([[1,2,3],])) & set(range(2,10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'numpy.ndarray'
En dat is wat er gebeurt als u kolomgegevens leest met uw aanpak:
>>> data
array([[ 1., 2., 3.],
[ 3., 4., 5.],
[ 5., 6., 7.],
[ 8., 9., 10.]])
>>> hsplit(data,3)[0]
array([[ 1.],
[ 3.],
[ 5.],
[ 8.]])
Waarschijnlijk kunt u gewoon
>>> data[:,0]
array([ 1., 3., 5., 8.])
in plaats daarvan.
(P.S. Je code ziet eruit alsof het niet duidelijk is of het data
of elementdata
is. Ik ging ervan uit dat het gewoon een typfout was.)
Antwoord 2, autoriteit 11%
numpy.ndarray
kan elk type element bevatten, b.v. int
, float
, string
etc. Controleer het type en voer zo nodig een conversie uit.