Python 在numpy数组的二维上使用izip

Python 在numpy数组的二维上使用izip,python,numpy,izip,Python,Numpy,Izip,我有以下资料: for i in xrange(n): label = labels[i] frame = data[:, i] dostuff() 其中数据为二维numpy数组。我想用izip重写它 for label, frame in izip(labels, ???): dostuff() 我应该用什么来替换?,以使其正常工作?您可以使用: ??? = numpy.transpose(data) 编辑:删除第二个版本。因为转置不会像我假设的那样复

我有以下资料:

for i in xrange(n):
    label = labels[i]
    frame = data[:, i]
    dostuff()
其中数据为二维
numpy
数组。我想用
izip
重写它

for label, frame in izip(labels, ???):
    dostuff()
我应该用什么来替换
,以使其正常工作?

您可以使用:

  ??? = numpy.transpose(data)
编辑:删除第二个版本。因为转置不会像我假设的那样复制数组,所以没有理由像我这样疯狂。

您可以使用:

  ??? = numpy.transpose(data)

编辑:删除第二个版本。因为transpose不会像我假设的那样复制数组,所以没有理由像我这样做。

如果您真的想使用
izip()
,您可以这样做:

for label, frame in izip(labels, data.T):
    dostuff()

通常建议不要使用Python循环迭代NumPy数组,而是使用C代码进行循环。如何做到这一点,取决于
dostuff()
实际做了什么。

如果您确实想使用
izip()
,您可以这样做:

for label, frame in izip(labels, data.T):
    dostuff()

通常建议不要使用Python循环迭代NumPy数组,而是使用C代码进行循环。如何做到这一点,取决于
dostuff()
实际做了什么。

什么是dostuff(),即它可以在numpy中实现吗ufuncs@vincent,不,不幸的是dostuff()不能在numpy中实现。什么是dostuff(),即它可以在numpy中实现吗ufuncs@vincent,没有dostuff()很遗憾,无法在numpy中完成。在切片numpy数组时,多个
省略号
对象将不会产生预期的结果--第一个对象将消耗所有剩余维度。您可能是指
slice(None)
,但即使这样,函数
iterate_axis()
也会比直接使用NumPy慢。@Sven Marnach,我使用省略号表示意外结果,因为我不确定如何生成:slice。我猜这就是slice(None)所代表的意思?是的,
data[slice(None)]
相当于
data[:]
@Sven Marnach,谢谢。我以前从不需要它,但现在我知道怎么做了!在对NumPy数组进行切片时,多个
省略号
对象不会产生预期的结果——第一个对象将消耗所有剩余维度。您可能是指
slice(None)
,但即使这样,函数
iterate_axis()
也会比直接使用NumPy慢。@Sven Marnach,我使用省略号表示意外结果,因为我不确定如何生成:slice。我猜这就是slice(None)所代表的意思?是的,
data[slice(None)]
相当于
data[:]
@Sven Marnach,谢谢。我以前从不需要它,但现在我知道怎么做了!data.T操作是创建一个新数组(一个缓慢的操作),还是仅仅改变了您访问数据的方式?我的数据数组太大了。@Jeff:
data.T
将创建一个新的数组对象,它与
data
共享相同的数据。您的数据不会被复制。data.t操作是创建一个新数组(一个缓慢的操作),还是仅仅改变了您访问数据的方式?我的数据数组太大了。@Jeff:
data.T
将创建一个新的数组对象,它与
data
共享相同的数据。您的数据将不会被复制。