我一直试图解决这个问题超过2个小时。
我编写了一个脚本,我在其中放了一些调试print
s
...
print(array)
print(m)
print(np.dot(m.ravel(),array.ravel()))
...
当我启动它时,我有这个输出:
$ ./test.py
[[ 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0]
[ 0 0 0 0 0 0 0]
[ 0 0 0 20303 20303 20303 20303]
[20303 20303 20303 20303 20303 20303 20303]
[20303 20303 20303 20303 20303 20303 20303]
[20303 20303 20303 20303 20303 20303 20303]]
[[False False False False False False False]
[False False False False False False False]
[False False False False False False False]
[False False False False True False False]
[False False True False True False False]
[False False False True False False False]
[False False False False False False False]]
15676
当我尝试在python控制台中重现此行为时,我对点积有不同的结果:
$ /usr/bin/python3
Python 3.4.2 (default, Oct 8 2014, 10:45:20)
[GCC 4.9.1] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> array=np.array([[ 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0, 0, 0],
[ 0, 0, 0, 20303, 20303, 20303, 20303],
[20303, 20303, 20303, 20303, 20303, 20303, 20303],
[20303, 20303, 20303, 20303, 20303, 20303, 20303],
[20303, 20303, 20303, 20303, 20303, 20303, 20303]])
>>>
>>> m=np.array([[False, False, False, False, False, False, False],
[False, False, False, False, False, False, False],
[False, False, False, False, False, False, False],
[False, False, False, False, True, False, False],
[False, False, True, False, True, False, False],
[False, False, False, True, False, False, False],
[False, False, False, False, False, False, False]])
>>> np.dot(m.ravel(),array.ravel())
81212
这会导致什么?顺便说一下,81212
是我期望的结果,并且真的不明白我的脚本中发生了什么。
答案 0 :(得分:1)
实际上并非解决问题,但可能是一种解决方法:
在NumPy 1.10中, np.ravel
略有改变,这可能导致“奇怪”的行为:
从NumPy 1.10开始,返回的数组将与输入数组具有相同的类型。 (例如,将为掩码数组输入返回一个掩码数组)
但在这种情况下你真的需要np.ravel
吗?如何使用boolean indexing并总结结果:
>>> print(array[m].sum())
81212
如果这是你想要实现的目标,那么这种方法可能比np.dot
扁平数组更加“pythonic”。
答案 1 :(得分:0)
在我的脚本中,当我在控制台中创建array
时,uint16
的dtype为int64
。curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "aaa:bbb");
。转换它的类型解决了问题,但我不明白为什么它是必要的。