Подтвердить что ты не робот

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
4b9b3361

Ответ 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" вместо "математика".