繁体   English   中英

如何打印我刚刚使用numpy zip()压缩的数组数据

[英]How to print array data that I just compressed using numpy zip()

我试图弄清楚如何从压缩的内容中查看数据。 该方案在代码中如下所示:

import numpy as np
x=[1,2,3]
y=[4,5,6]
z=[7,8,9]
data=np.array(zip(x,y,z))
print (data)

产量

array(<zip object at 0x00000166568AE648>, dtype=object)

但我想查看zip内的数据,所以当我说

print(data)

表明

<zip object at 0x00000166568AE648>

现在人们在关于D_stacking的类似帖子中进行讨论。

np.dstack(data)

但它显示输出为错误

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-20-2126862e2c70> in <module>()
----> 1 np.dstack(data)

C:\ProgramData\Anaconda3\lib\site-packages\numpy\lib\shape_base.py in dstack(tup)
    407 
    408     """
--> 409     return _nx.concatenate([atleast_3d(_m) for _m in tup], 2)
    410 
    411 def _replace_zero_by_x_arrays(sub_arys):

TypeError: iteration over a 0-d array

0维..? 这是什么意思..? 对于其他我找到的解压缩zip来说,它说的也一样

a,b,c=zip(*data)
print('x=',a)
print('y=',b)
print('z=',c)

错误

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-41-6ad67a911952> in <module>()
----> 1 a,b,c=zip(*data)
      2 print('x=',a)
      3 print('y=',b)
      4 print('z=',c)

TypeError: iteration over a 0-d array

然后我去了programiz.com的zip()函数,在那里我找到了set()函数。

result = set(data)
print (result)

错误

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-39-2e1af52686b4> in <module>()
----> 1 result = set(data)
      2 print (result)

TypeError: iteration over a 0-d array

我相信我在基本的x,y,z数据上做得不好。.但我的知识仅限于您对我的看法。

您能帮我解决我所缺少的事情吗,并解释我错过的重要一点。


当我搜索TypeError: iteration over a 0-d array

人们谈论json ,除了FC3之外,我还有0个想法,对不起。

列表元组的zip是列表转置的一种:

In [83]: x=[1,2,3]
    ...: y=[4,5,6]
    ...: z=[7,8,9]
    ...: 
In [84]: zip(x,y,z)
Out[84]: <zip at 0xaf79f84c>

但是在Py3中, zip就像生成器一样; 您必须将结果包装在list (或对其进行迭代)以获取列表:

In [85]: list(zip(x,y,z))
Out[85]: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

到目前为止,我还没有使用numpy ,而只是使用普通的Python。 zip文档: https : //docs.python.org/3/library/functions.html#zip

您可以从这样的列表中创建一个数组

In [86]: np.array(list(zip(x,y,z)))
Out[86]: 
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])

尝试从zip生成数组会生成一个单元素数组0d,其中包含指向该zip object的指针。 这样做毫无意义。

In [87]: np.array(zip(x,y,z))
Out[87]: array(<zip object at 0xaf75d8cc>, dtype=object)

但是,要从这些列表中获取2d矩阵,则使用某种版本的concatenate会更容易(至少是更直接),该版本需要一个数组或列表的列表。 例如, stack允许您指定一个新的轴来连接事物:

In [88]: np.stack((x,y,z))   # same as np.array((x,y,z))
Out[88]: 
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 9]])
In [89]: np.stack((x,y,z),axis=1)
Out[89]: 
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])

zip的常见用法是一次迭代几个列表:

In [92]: for i,j,k in zip(x,y,z):
    ...:     print(i,j,k,i+j+k)
    ...:     
1 4 7 12
2 5 8 15
3 6 9 18

从注释中,您似乎专注于从此数组中获取值:

In [97]: data = np.array(zip(x,y,z))
In [98]: data
Out[98]: array(<zip object at 0xabee412c>, dtype=object)

您可以使用[()]索引从0d数组中提取项目。 data.item()也可以:

In [99]: data[()]
Out[99]: <zip at 0xabee412c>

现在,您可以应用列表并查看项目:

In [100]: list(data[()])
Out[100]: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

zip实际上并不包含其参数。 而是引用了原始列表。 data数组也是如此。

需要压缩数据吗? 您可以向NumPy传递列表列表,例如:

import numpy as np
x=[1,2,3]
y=[4,5,6]
z=[7,8,9]
data=np.array([x,y,z])
print (data)

输出:

[[1 2 3]
 [4 5 6]
 [7 8 9]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM