Python 2.7 在python中查找非零的最大索引
我有一个模块可以打印12000个60 y值的列表,而不是一组60 x值。要查找y值不为零的最大x值。 使用numpy np.nonzero(y)返回每个列表。也试过Python 2.7 在python中查找非零的最大索引,python-2.7,numpy,Python 2.7,Numpy,我有一个模块可以打印12000个60 y值的列表,而不是一组60 x值。要查找y值不为零的最大x值。 使用numpy np.nonzero(y)返回每个列表。也试过 b = [] for i in range(len(y)): if y[i] != 0: b.append(i) print b 它返回了y中的所有12000个指数 非常感谢您的帮助 您可能正在寻找 根据条件从x或y返回元素 如果只给出条件,则返回条件.nonzero() 大概是这样的: largestindex = n
b = []
for i in range(len(y)):
if y[i] != 0: b.append(i)
print b
它返回了y中的所有12000个指数
非常感谢您的帮助 您可能正在寻找 根据条件从x或y返回元素 如果只给出条件,则返回条件.nonzero() 大概是这样的:
largestindex = numpy.max(numpy.where(item))
where
函数返回一个元组,因此需要提取第一个元素以获取所需的数据:
import numpy as np
y = [0, 0, 2, 3, 1, 0, 0, 3, 0]
print np.where(y)[0].max()
这张照片是7张
[编辑…]
我刚刚重读了阿德莱的问题:他有一个很大的列表,每个列表都有60个x
值。如果所有内容都在列表中,并且其中一个列表非常大,那么将包含60个值的12000项列表转换为12000×60数组可能是最快的,然后直接转换为numpy
。如果y
是“外部”列表,则np.array(y)
应返回形状12000、60。如果是这种情况,这是一个更好的解决方案,可以找到哪些x
值在某个地方具有非零y
值:
yy = np.array(y) # results in a shape (12000, 60)
np.where((yy != 0).any(axis=0))[0]
逻辑是:通过比较零将数据转换为真值表,然后使用any(axis=0)
折叠真值表,然后在折叠的真值表中找到最大的索引
要将其与x
数据拉到一起,并将其包装成一行:
np.array(x)[np.where((np.array(y) != 0).any(axis=0))[0]].max()
这将给出最大的
x
值,该值具有一些非零的y
值。如果您想要一个对应于非零y值的最大x值数组,这将是一个12000项x值列表(每组60个y值一个),您需要一些稍微不同的东西。这不起作用array
和numpy.max
是函数。它们不一样,array==numpy.max
的结果总是返回false。我想我应该在写评论时更频繁地刷新页面!包括一个小例子和预期的结果,它使理解问题更容易。感谢您的深入回答!我尝试了您建议的修复,并返回了错误np。其中((yy!=0)。any(axis=0))[0]AttributeError:“bool”对象没有属性“any”
请查看类型(yy)
。它应该是numpy.ndarray,或者如果您使用的是python3。如果type(yy)
是list,则需要将其转换为yy=np.array(yy)
的数组。yy!=0也应该是numpy.ndarray。然后,numpy.ndarray确实具有属性.any()
。当您获得一个ndarray时,最好检查它的大小和类型。它们是yy.shape
和yy.dtype
yy.shape
应该是整个数据集,比如(12000,60)和yy.dtype
应该是一个数字类型,比如int64或float。
np.array(x)[np.where((np.array(y) != 0).any(axis=0))[0]].max()