arange: TypeError: unsupported operand type(s) for -: 'list' and 'int'

烂漫一生 提交于 2021-02-01 05:17:40

问题


I am trying to write a very simple code which just returns an array of x from 0 to 10 in increments of 0.1, but keep getting error:

    x = np.arange[[0,10,0.1,np.float]]
TypeError: 'builtin_function_or_method' object is not subscriptable

This is my code:

import numpy as np 
import matplotlib.pyplot as plt 

results = {} # creating an empty dictionary 

f = open (r'D:\Work\Thesis\TEST_figures\telemac_comparison_1', 'w')

f.write ('Distance'+'Free surface')

result = [[], []]
x = np.arange([0,10,0.1,np.float])
print x 

As you can see its clearly not finished but I wanted to get this line sorted now.


回答1:


Don't pass in a list, pass in separate arguments:

x = np.arange(0, 10, 0.1, np.float)

Demo:

>>> np.arange(0, 10, 0.1, np.float)
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1. ,
        1.1,  1.2,  1.3,  1.4,  1.5,  1.6,  1.7,  1.8,  1.9,  2. ,  2.1,
        2.2,  2.3,  2.4,  2.5,  2.6,  2.7,  2.8,  2.9,  3. ,  3.1,  3.2,
        3.3,  3.4,  3.5,  3.6,  3.7,  3.8,  3.9,  4. ,  4.1,  4.2,  4.3,
        4.4,  4.5,  4.6,  4.7,  4.8,  4.9,  5. ,  5.1,  5.2,  5.3,  5.4,
        5.5,  5.6,  5.7,  5.8,  5.9,  6. ,  6.1,  6.2,  6.3,  6.4,  6.5,
        6.6,  6.7,  6.8,  6.9,  7. ,  7.1,  7.2,  7.3,  7.4,  7.5,  7.6,
        7.7,  7.8,  7.9,  8. ,  8.1,  8.2,  8.3,  8.4,  8.5,  8.6,  8.7,
        8.8,  8.9,  9. ,  9.1,  9.2,  9.3,  9.4,  9.5,  9.6,  9.7,  9.8,
        9.9])

Incidentally, the error message in your question title is caused when you pass in a list as the first argument, np.float as the second:

>>> np.arange([0,10,0.1], np.float)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'type' and 'list'

but the stop, start and step values are separate parameters in the documented function signature.

Your traceback also differs from the code you actually published; that's using subscription syntax (indexing) on the function object, instead of trying to call it. Don't use np.arange[], it is a function object not a sequence.




回答2:


You seem to have two attempts

  1. np.arange[[...]] attempts subscription (c.f. list indexing l[0] or dictionary access by key d['key']), which doesn't make any sense - arange is a function; and

  2. np.arange([...]) passes a single list argument, when arange actually takes (up to) four separate arguments.

Instead, you should do either:

np.arange(*[...]) # unpack the list to separate arguments

which would be useful if you want to define the arguments once and use them repeatedly, or:

np.arange(...) # pass as separate arguments

A demo of the latter:

>>> x = np.arange(0, 10, 0.1, np.float)
>>> x
array([ 0. ,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1. ,
        1.1,  1.2,  1.3,  1.4,  1.5,  1.6,  1.7,  1.8,  1.9,  2. ,  2.1,
        2.2,  2.3,  2.4,  2.5,  2.6,  2.7,  2.8,  2.9,  3. ,  3.1,  3.2,
        3.3,  3.4,  3.5,  3.6,  3.7,  3.8,  3.9,  4. ,  4.1,  4.2,  4.3,
        4.4,  4.5,  4.6,  4.7,  4.8,  4.9,  5. ,  5.1,  5.2,  5.3,  5.4,
        5.5,  5.6,  5.7,  5.8,  5.9,  6. ,  6.1,  6.2,  6.3,  6.4,  6.5,
        6.6,  6.7,  6.8,  6.9,  7. ,  7.1,  7.2,  7.3,  7.4,  7.5,  7.6,
        7.7,  7.8,  7.9,  8. ,  8.1,  8.2,  8.3,  8.4,  8.5,  8.6,  8.7,
        8.8,  8.9,  9. ,  9.1,  9.2,  9.3,  9.4,  9.5,  9.6,  9.7,  9.8,
        9.9])

In future, consider reading the documentation when trying to use a function.



来源:https://stackoverflow.com/questions/24571590/arange-typeerror-unsupported-operand-types-for-list-and-int

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!