我正在使用numpy.genfromtxt阅读一个文件,它带来了字符串和数值的列。我需要做的一件事是检测输入的长度。只要有多个值读入到每个数组中,这就很好。
但是.如果结果数组中只有一个元素,则逻辑失败。我可以在这里重新创建一个例子:
import numpy as np
a = np.array(2.3)
len(a)返回错误:
TypeError: len() of unsized object
但是,如果a有2个或更多元素,则len()的行为与预期的一样。
import numpy as np
a = np.array([2.3,3.6])
len(a)返回2
我担心的是,如果我使用一些奇怪的异常处理,我无法区分a为空和a的长度为1。
编辑:@noskio建议设置a = np.array([2.3])。问题是,a的实际起源是通过使用numpy. genfromtxt。代码看起来像这样:
import numpy as np
indata = np.genfromtxt(some_filename, names=True,dtype=None)
a = indata['one_col_headername']
因此,如果indata在文件中只有一行,则a是0-d数组。
5条答案
按热度按时间6ovsh4lw1#
如果你需要一行程序(假设你期望的答案是1):
This page解释了为什么决定在numpy中实现0维数组。
2g32fytz2#
收益率
你可以区分一个“空”数组(例如
np.array([])
)和numpy标量(例如,np.array(2.3)
)通过观察形状的长度。kzmpq1sx3#
如果你知道数组是一维的,ndarrays的
size
属性似乎在这种情况下也能起作用。在我看来,a.size
比len(np.atleast_1d(a))
可读性要好得多。但是,请注意,如果数组有多个维度,size
属性将返回数组中元素的 total 数量:cwxwcias4#
xoshrz7s5#
遇到同样的问题,我找到了一个简单的方法来区分mishaF和leoschet提到的两个用例: