Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python numpy';s from函数访问输入函数中的数组_Python_Numpy - Fatal编程技术网

Python numpy';s from函数访问输入函数中的数组

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

我正在尝试使用numpy的
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))

你是对的。谢谢我以为我在这里做了与你完全相同的事情,但我也收到了一条错误消息。我已经删除了以前的代码,无法再次复制错误。无论如何,谢谢!阅读
[源代码]
。这是一个简单的函数,几乎没有用处。它创建
索引
,并将它们(全部)传递给函数。因为人们想让它做些别的事情,所以它是误导性的。这不是一种“矢量化”魔法。