我有一個更大、更復雜的函式,基本上可以歸結為以下函式:f(X)。為什么這個函式不能將 linspace 整數作為引數?給出此錯誤:
“TypeError:只有整數標量陣列可以轉換為標量索引”
import numpy
from matplotlib import*
from numpy import*
import numpy as np
from math import*
import random
from random import *
import matplotlib.pyplot as plt
def f(x):
for i in range(x):
x =1
return x
xlist = np.linspace(0, 100, 10)
ylist = f(xlist)
plt.figure(num=0)
uj5u.com熱心網友回復:
linspace產生一個numpy陣列,而不是一個串列。不要混淆兩者。
In [3]: x = np.linspace(0,100,10)
In [4]: x
Out[4]:
array([ 0. , 11.11111111, 22.22222222, 33.33333333,
44.44444444, 55.55555556, 66.66666667, 77.77777778,
88.88888889, 100. ])
如果我們考慮到 linspace 包含端點,這些數字會看起來更好:
In [5]: x = np.linspace(0,100,11)
In [6]: x
Out[6]: array([ 0., 10., 20., 30., 40., 50., 60., 70., 80., 90., 100.])
作為一個陣列,我們可以簡單地添加一個標量;無需撰寫回圈:
In [7]: x 1
Out[7]: array([ 1., 11., 21., 31., 41., 51., 61., 71., 81., 91., 101.])
range接受一個數字(或 3),但絕不是一個陣列(超過 1 個元素):
In [8]: for i in range(5): print(i)
0
1
2
3
4
我們不能i在這樣的回圈中修改,或者用于創建范圍的“x”。但是我們可以寫一個串列推導:
In [9]: [i 1 for i in range(5)]
Out[9]: [1, 2, 3, 4, 5]
參考:
https://www.w3schools.com/python/ref_func_range.asp
https://numpy.org/doc/stable/reference/generated/numpy.linspace.html
uj5u.com熱心網友回復:
xlist = np.linspace(0, 100, 10) 1
uj5u.com熱心網友回復:
根據您的評論,您似乎只是想繪制幾點。我認為您對 range 和 linspace 的使用是多余的,您根本不需要回圈。您不需要 for 回圈來繪制許多點,除非您嘗試繪制多條曲線或對每個點做一些花哨的事情。例如,這繪制了 10 個點:
x = np.linspace(0, 100, 10)
y=x*x
plt.plot(x,y,'.')
我認為這是一個很好的起點:https ://matplotlib.org/3.5.1/tutorials/introductory/pyplot.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/448582.html
標籤:麻木的 matplotlib 阴谋
上一篇:如何避免散點圖中的標簽重疊
