NumPy垂直函数:'浮动'对象不可订阅

numpy vertical function :#39;float#39; object is not subscriptable(NumPy垂直函数:#39;浮动#39;对象不可订阅)
本文介绍了NumPy垂直函数:'浮动'对象不可订阅的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个麻木的阵列:

import numpy as np

pval=np.array([[0., 0.,0., 0., 0.,0., 0., 0.],
              [0., 0., 0., 0., 0.,0., 0., 0.]])

和矢量化函数:

def getnpx(age):
    return pval[0]+age
    
vgetnpx = np.frompyfunc(getnpx, 1, 1)

vgetnpx(1)

输出:

array([1., 1., 1., 1., 1., 1., 1., 1.])

但是,如果我想为pval设置一个变量:

def getnpx(mt,age):
    return mt[0]+age

vgetnpx = np.frompyfunc(getnpx, 2, 1)

vgetnpx(pval,1)

我收到错误:

TypeError: 'float' object is not subscriptable

为pval设置变量的正确方法是什么?任何朋友都可以帮助您吗?

推荐答案

我不明白您为什么要尝试使用frompyfunc。用于将数组参数传递给仅接受标量输入的函数。

In [97]: pval=np.array([[0., 0.,0., 0., 0.,0., 0., 0.],
    ...:               [0., 0., 0., 0., 0.,0., 0., 0.]])
在第一种情况下,您使用全局pval,并且只使用1age值。无需frompyfunc

In [98]: pval[0]+1
Out[98]: array([1., 1., 1., 1., 1., 1., 1., 1.])

如果要将pval作为参数传递,只需执行以下操作:

In [99]: def foo(mt,age):
    ...:     return mt[0]+age
    ...: 
In [100]: foo(pval,1)
Out[100]: array([1., 1., 1., 1., 1., 1., 1., 1.])

您提供了指向我之前回答的问题的链接。这种情况的症结在于,您的函数返回了一个大小可能不同的数组。我展示了如何通过列表理解来使用它。我还展示了如何调整vectorize,以便它可以愉快地返回objectdtype结果。或者使用frompyfunc返回该对象。在所有这些情况下,函数参数都是标量,即单个数字。

如果您的目标是向pval的每一行添加不同的age,则只需执行以下操作:

In [102]: pval + np.array([[1],[2]])
Out[102]: 
array([[1., 1., 1., 1., 1., 1., 1., 1.],
       [2., 2., 2., 2., 2., 2., 2., 2.]])

这篇关于NumPy垂直函数:'浮动'对象不可订阅的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)