TypeError: только массивы length-1 могут быть преобразованы в скаляры Python при попытке экспоненциально соответствовать данным
f=np.loadtxt('Single Small Angle 1.txt',unpack=True,skiprows=2)
g=np.loadtxt('Single Small Angle 5.txt',unpack=True,skiprows=2)
x = f-g[:,:11944]
t=range(len(x))
m=math.log10(abs(x))
np.polyfit(t,m)
plt.plot(t,abs(x))
plt.show()
Я просто не уверен, как исправить мою проблему. Он продолжает говорить:
m=math.log10(abs(x))
TypeError: only length-1 arrays can be converted to Python scalars
Ответы
Ответ 1
Функции, math.abs()
numpy, такие как math.abs()
или math.log10()
, плохо работают с массивами numpy. Просто замените строку, выдавшую ошибку:
m = np.log10(np.abs(x))
Кроме того, np.polyfit()
не будет работать, поскольку в нем отсутствует параметр (и вы все равно не назначаете результат для дальнейшего использования).
Ответ 2
Вот еще один способ воспроизвести эту ошибку в Python2.7 с помощью numpy:
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.concatenate(a,b) #note the lack of tuple format for a and b
print(c)
Метод np.concatenate
выдает ошибку:
TypeError: only length-1 arrays can be converted to Python scalars
Если вы прочтете документацию вокруг numpy.concatenate, то увидите, что она ожидает кортеж объектов numpy array. Таким образом, окружение переменных паренами исправило это:
import numpy as np
a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.concatenate((a,b)) #surround a and b with parens, packaging them as a tuple
print(c)
Затем он печатает:
[1 2 3 4 5 6]
Что здесь происходит?
Эта ошибка - случай реализации пузыря - она вызвана философией утиной Python. Это загадочное низкоуровневое сообщение об ошибке Python, вызывающее рвоту, когда получает какие-то неожиданные типы переменных, пытается убежать и что-то делать, проходит на полпути, рвёт, пытается исправить действие, терпит неудачу, а затем говорит вам, что "вы можете" Переформулируйте подпространственные респонденты, когда во вторник дует ветер с востока ".
В более разумных языках, таких как C++ или Java, он сказал бы вам: "вы не можете использовать TypeA там, где ожидался TypeB". Но Python делает все возможное, чтобы бороться, делает что-то неопределенное, терпит неудачу, а затем возвращает вам бесполезную ошибку. Тот факт, что мы должны это обсуждать, является одной из причин, по которой я не люблю Python или его философию утки.
Ответ 3
Вы можете использовать "scipy" вместо "математика".