我用python编写了一个程序,调试代码时,我得到一些输出,如:
A = [[ 0.49184191 0.49216545 0.49045572 0.49120336 0.49162126 0.49127175
0.4918312 0.49146007 0.49217111 0.49105725 0.49188209 0.49131341
0.4915551 0.4916877 0.49176704 0.49107439 0.49179349 0.49113405
0.49181949 0.49114229 0.49080868 0.49212299 0.49132733 0.49130678
0.49243294 0.49138045 0.49142812 0.49110904 0.49057333 0.49152252
0.49156431 0.49158843 0.49213234 0.49119104 0.49058275 0.49160299
0.49096081 0.49144198 0.4920761 0.49149983 0.49164554 0.49108083
0.49207692 0.49160705 0.49198164 0.49135187 0.49185721 0.49189228
0.49173232 0.49141264 0.49135901 0.49203396 0.49211383 0.49157355
0.49164756 0.4910949 0.49197874 0.49131 0.4915147 0.4912441
0.49158387 0.49133532 0.49115916 0.49170297 0.49213771 0.49130702
0.49181432 0.4913136 0.49129868 0.49137166 0.49195617 0.4911638
0.4919901 0.49131729 0.49183565 0.49135328 0.49133418 0.49114096
0.49153416 0.49129274 0.4915175 0.49140146 0.49147821 0.4923465
0.49138114 0.49110974 0.49204106 0.49100999 0.49227227 0.49124463
0.49178075 0.49126929 0.49129691 0.4916742 0.49099519 0.491607
0.49153693 0.49128967 0.49183968 0.49183926 0.49191762 0.49191687
0.49191334]]
和
Y = [[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
用这些变量执行某些动作似乎没有问题,例如:
dA = - (np.divide(Y, A) - np.divide(1 - Y, 1 - A))
但是当我在单独的单元格中定义一些数组供我自己使用时:
import numpy as np
m = [[4 5 6]]
n = [[1 2 3]]
然后作为输出,我有:
File "<ipython-input-61-52c19e46fafb>", line 3
m = [[4 5 6]]
^
SyntaxError: invalid syntax
所以为什么不能定义m和n,因为我在其他代码中有类似的输出?
答案 0 :(得分:2)
调试代码时,您或调试器使用f = Just . (1+)
显示NumPy数组。 print
命令并不代表您定义一个数组。它应用特定的显示规则来辅助演示。
在这种情况下,您需要确保使用print
来分隔NumPy数组中的值:
,
答案 1 :(得分:1)
这是语法,编码和表示形式的问题:
>>> print 1e3
1000.0
正如人们所看到的那样……这不会打印1e3
。它打印1000.0
。但这是否意味着1e3
不等于1000.0
?
>>> print 1e3 == 1000.0
True
不。相等因此1e3
和1000.0
在语义上是同一件事,但从语法上看却是不同的。
>>> print "hi"
hi
但是然后:
>>> print hi
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'hi' is not defined
hi
和"hi"
可以认为在语义上是相同的,但是在语法上它们是完全不同的。打印的作用是打印出对象/值的“字符串版本”。不一定会按照您在代码中输入的方式打印出来。
>>> class Animal:
... def __str__(self):
... return "Cat"
...
>>> print Animal()
Cat
这将打印Cat
,但是我们不能使用Cat
来创建动物。
现在,python中列表的语法需要逗号。另外... numpy数组不是列表。有不同的类型。即使字符串表示形式相同:“ 5”和5也具有相同的字符串表示形式,但是:
>>> print "5"
5
>>> print 5
5
仅因为str(a) == str(b)
并不意味着暗示a == b
也不意味着type(a) == type(b)
。
它们甚至不是同一类型。一个是整数,另一个是字符串。如果定义自己的类型,则可以为类型定义字符串表示形式,但这不会更改语言的语法。
numpy所做的是这样的:
>>> class Array:
... def __init__(self, xs):
... self.xs = xs
... def __str__(self):
... return "[%s]" % (" ".join(map(str, self.xs)))
...
>>> arr = Array([1,2,3])
>>> arr
<__main__.Array instance at 0x7f783f257ef0>
>>> print arr
[1 2 3]
它只是定义一个字符串表示形式。否则您将无法打印它:
>>> class Array:
... def __init__(self, xs):
... self.xs = xs
...
>>> arr = Array([1,2,3])
>>> print arr
<__main__.Array instance at 0x7f783f257f38>
但是,当我们在代码中输入某种东西的字符串表示形式时,我们不能指望它是有效的代码...因为它只是 something 的一种字符串表示形式...不一定有效的代码。