如何在numpy.fromfunction中使用范围?

问题描述 投票:1回答:1

我正在尝试创建一个矩阵,其索引(i,j)的值将是f(i,j),,用于我正在定义的函数。我正在尝试用numpy.fromfunction这样做,但我无法让它工作。这是代码

import numpy as np

def f(i,j):
    return sum((i+1)//k for k in np.arange(1,j+2))

def M(N):
    shape = np.array([N,N])
    np.fromfunction(f, shape,dtype = np.int)

A= M(5)   

我收到了错误

builtins.TypeError:只有length-1数组可以转换为Python标量

在调用fromfunction时,我想它必须与np.arange有关。

最初,我有range(1,j+2),但后来我得到了错误

TypeError:只能将整数标量数组转换为标量索引

你能告诉我我需要做什么吗?

python numpy
1个回答
2
投票

我想你必须先vectorize f

>>> np.fromfunction(np.vectorize(f), (5, 5), dtype=int)
array([[ 1,  1,  1,  1,  1],
       [ 2,  3,  3,  3,  3],
       [ 3,  4,  5,  5,  5],
       [ 4,  6,  7,  8,  8],
       [ 5,  7,  8,  9, 10]])

实际上,fromfunction不是一个接一个地通过坐标,而是一次性通过:

>>> def f(i, j):
...     print(i, j)
...     return sum((i+1)//k for k in range(1, j+2))
... 
>>> np.fromfunction(f, (5, 5), dtype=int)
[[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]] [[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]]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/paul/local/lib/python3.6/site-packages/numpy/core/numeric.py", line 1914, in fromfunction
    return function(*args, **kwargs)
  File "<stdin>", line 3, in f
TypeError: only integer scalar arrays can be converted to a scalar index
© www.soinside.com 2019 - 2024. All rights reserved.