#python #pandas #matplotlib #linear-regression
#python #numpy
Вопрос:
Из текстового файла, содержащего три столбца данных, я хочу иметь возможность просто брать slice
данные из всех трех столбцов, где значения в первом столбце равны значениям, определенным в above
. Затем я хочу поместить фрагмент данных в новый массив с именем slice
(я использую 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)amp;set(above)
Вышеприведенное возвращается с:
Traceback (most recent call last):
File "<pyshell#27>", line 1, in <module>
set(energies)amp;set(above)
TypeError: unhashable type: 'numpy.ndarray
Ответ №1:
Ваша переменная energies
, вероятно, имеет неправильную форму:
>>> from numpy import array
>>> set([1,2,3]) amp; set(range(2, 10))
set([2, 3])
>>> set(array([1,2,3])) amp; set(range(2,10))
set([2, 3])
>>> set(array([[1,2,3],])) amp; set(range(2,10))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'numpy.ndarray'
И это то, что происходит, если вы читаете столбчатые данные, используя свой подход:
>>> data
array([[ 1., 2., 3.],
[ 3., 4., 5.],
[ 5., 6., 7.],
[ 8., 9., 10.]])
>>> hsplit(data,3)[0]
array([[ 1.],
[ 3.],
[ 5.],
[ 8.]])
Вероятно, вы можете просто использовать
>>> data[:,0]
array([ 1., 3., 5., 8.])
вместо этого.
(P.S. Ваш код выглядит так, как будто он не определился, является ли это data
или elementdata
. Я предположил, что это просто опечатка.)
Комментарии:
1. Большое вам спасибо за этот ответ. Это сработало идеально и прояснило для меня ситуацию. Данные / elementdata действительно были опечаткой.
2. Разница в форме здесь между хешируемым 1D и нехешируемым 2D массивом numpy.
Ответ №2:
numpy.ndarray
может содержать элементы любого типа, например int
, float
, string
и т.д. Проверьте тип и при необходимости выполните преобразование.