我的输入是一个元组的numpy数组
values = np.array([(4, 5, 2, 18), (4, 7, 3, 8)])
我的功能如下:
def outerFunc(values):
print(values)
def innerFunc(values):
print(values)
mean = np.mean(values)
result = 0
for i in range(len(values)):
result += math.pow(values[i] - mean, 2)
return result
if isinstance(values, np.ndarray):
return np.vectorize(innerFunc)(values)
else:
return innerFunc(values)
虽然我想向量化1维,即在innerFunc内部执行一个元组,但是我的输出如下:
[[ 4 5 2 18]
[ 4 7 3 8]]
4
...
这意味着vectorize函数正在2维上进行矢量化,并且出现以下错误:
for i in range(len(values)):
TypeError: object of type 'numpy.int64' has no len()
进行什么更改,以使输出为:
[[ 4 5 2 18]
[ 4 7 3 8]]
[4 5 2 18]
...
像这样的东西
谢谢。
编辑
当元组长度不同时,它可以正常工作,任何人都可以解释一下,
例如,我的输入是
np.array([(4, 5, 2, 18), (4, 7, 3,)])
和功能打印
[(4, 5, 2, 18) (4, 7, 3)]
(4, 5, 2, 18)
(4, 7, 3)
返回的值是
[158.75 8.66666667]
因此,仅当所有元组的长度相同时,该函数才将它们视为数字。
谢谢。
最佳答案
In [1]: values = np.array([(4, 5, 2, 18), (4, 7, 3, 8)])
In [2]: values
Out[2]:
array([[ 4, 5, 2, 18],
[ 4, 7, 3, 8]])
In [3]: values.shape
Out[3]: (2, 4)
In [4]: x=np.array([(4, 5, 2, 18), (4, 7, 3,)])
In [5]: x
Out[5]: array([(4, 5, 2, 18), (4, 7, 3)], dtype=object)
In [6]: x.shape
Out[6]: (2,)
values
是一个二维数字数组。 np.vectorize
将8个元素中的每个元素一次传递给内部函数。它不会按行迭代。x
是具有2个元素(元组)的一维数组。 vectorize
会将每个这些元组传递到您的内部。当简单的迭代可行时,不要使用
vectorize
-使用起来会更慢,更难。创建阵列后,请查看它们,确保您了解形状和dtype。不要做假设。
关于python - Numpy vectorize()使整个数组变平,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56109533/