Python numpy';s from函数访问输入函数中的数组
我正在尝试使用numpy的Python numpy';s from函数访问输入函数中的数组,python,numpy,Python,Numpy,我正在尝试使用numpy的fromfunction创建一个numpy矩阵,其中每个矩阵元素都是函数的输出元素。下面是我的代码,它失败并显示错误消息索引器错误:用作索引的数组必须是整数(或布尔)类型。我阅读了有关Stackoverflow的一些参考资料,其中指出文档具有误导性(),有时无法按预期工作。在阅读这些线程之后,我怀疑问题在于我访问了输入函数中的两个数组,q_x和rs。你知道如何消除这个错误吗 import numpy as np q_x = np.array([1,2,3,4,5,6,7
fromfunction
创建一个numpy矩阵,其中每个矩阵元素都是函数的输出元素。下面是我的代码,它失败并显示错误消息索引器错误:用作索引的数组必须是整数(或布尔)类型
。我阅读了有关Stackoverflow的一些参考资料,其中指出文档具有误导性(),有时无法按预期工作。在阅读这些线程之后,我怀疑问题在于我访问了输入函数中的两个数组,q_x
和rs
。你知道如何消除这个错误吗
import numpy as np
q_x = np.array([1,2,3,4,5,6,7,8])
rs = np.array([0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8])
def ift_weight(i,j):
qr = q_x[i]*rs[j]
return qr*np.sin(qr)
print(np.fromfunction(ift_weight, (5,5)))
备注:当然有一些解决方法,比如创建一个空矩阵,然后迭代每个元素。我很好奇numpy的fromfunction
是否能更优雅地完成这样的任务
编辑:np.vectorize完美解决了这个问题。我可能输入了一些错误,所以我以前使用np.vectorize的试验失败了。此问题与您附加的链接完全相同。你能详细说明一下它不起作用的情况吗 所以这里的问题是,
np.fromfunction
正在移交整个网格,而不是一个索引
(Pdb) p i
array([[0., 0., 0., 0., 0.],
[1., 1., 1., 1., 1.],
[2., 2., 2., 2., 2.],
[3., 3., 3., 3., 3.],
[4., 4., 4., 4., 4.]])
(Pdb) p j
array([[0., 1., 2., 3., 4.],
[0., 1., 2., 3., 4.],
[0., 1., 2., 3., 4.],
[0., 1., 2., 3., 4.],
[0., 1., 2., 3., 4.]])
应用np.vectorize
并为索引指定dtype=int
,解决了这个问题
import numpy as np
q_x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
rs = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8])
def ift_weight(i, j):
qr = q_x[i]*rs[j]
return qr*np.sin(qr)
f = np.vectorize(ift_weight)
print(np.fromfunction(f, (5, 5), dtype=int))
你是对的。谢谢我以为我在这里做了与你完全相同的事情,但我也收到了一条错误消息。我已经删除了以前的代码,无法再次复制错误。无论如何,谢谢!阅读
[源代码]
。这是一个简单的函数,几乎没有用处。它创建索引
,并将它们(全部)传递给函数。因为人们想让它做些别的事情,所以它是误导性的。这不是一种“矢量化”魔法。