数组的输出为列表,而不是python中的1D数组

2024-06-02 09:09:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图写下一个非常简单的行,以拥有一个1D数组,但是,输出并不像预期的那样,它是正确的,但在每5个元素前面都有单词数组,我附上了代码:

import numpy as np


 c=np.array([[1,11,21,31,5],[4,14,24,34,5],
             [7,17,27,37,5],[31,41,51,61,5],[34,44,54,64,5],
             [37,47,57,67,5],[61,71,81,91,5],[64,74,84,94,5], 
            [64,74,84,94,5],[64,74,84,94,5], 
              [64,74,84,94,5]
             ,[64,74,84,94,5],[64,74,84,94,5],[64,74,84,94,5], 
               [64,74,84,94,5], 
              [67,77,87,97,5]])
  s=np.array([4,3,2,1])
  r_max=np.max(s)
  d  =    []
  x=4
  for I in range(x-1,-2,-2):
      for J in range(r_max-s[I]):
          d=[d,c[r_max*I-J+3]]
    
  print(d)
  # Output: [[[[[[[[], array([67, 77, 87, 97,  5])], array([64, 74, 84, 94,  5])], array([64, 
            # 74, 84, 94,  5])], array([64, 74, 84, 94,  5])], array([67, 77, 87, 97,  5])], 
             # array([64, 74, 84, 94,  5])], array([64, 74, 84, 94,  5])]
  # expected output same numbers but as 1D array as the following:
    #[67, 77, 87, 97, 64, 74, 84, 94,  5, 64, 74, 84, 94,  5, 64, 74, 84, 94,  5,67, 77, 87, 
    # 97,  5,64, 74, 84, 94,  5,64, 74, 84, 94,  5]]

Tags: 代码inimportnumpy元素foroutputas
2条回答

d=[d,c[r_max*I-J+3]],这里您将添加一个列表作为元素

如果您想要merge2列表,您可以执行:d = d + list(c[r_max*I-J+3]])

您还可以使用np.concatenate:d = np.concatenate((d, c[r_max*I-J+3]])(别忘了用d = np.array([])修改d定义)

改用list.append

In [373]:   d  =    []
     ...:   x=4
     ...:   for I in range(x-1,-2,-2):
     ...:       for J in range(r_max-s[I]):
     ...:           d.append(c[r_max*I-J+3])
     ...: 
In [374]: d
Out[374]: 
[array([67, 77, 87, 97,  5]),
 array([64, 74, 84, 94,  5]),
 array([64, 74, 84, 94,  5]),
 array([64, 74, 84, 94,  5]),
 array([67, 77, 87, 97,  5]),
 array([64, 74, 84, 94,  5]),
 array([64, 74, 84, 94,  5])]
In [375]: np.array(d)
Out[375]: 
array([[67, 77, 87, 97,  5],
       [64, 74, 84, 94,  5],
       [64, 74, 84, 94,  5],
       [64, 74, 84, 94,  5],
       [67, 77, 87, 97,  5],
       [64, 74, 84, 94,  5],
       [64, 74, 84, 94,  5]])

在列表中收集numpy数组时,显示内容包括单词array。它告诉我们列表包含数组。d列表的元素都是相同的形状,因此np.array可以生成一个漂亮的二维数字数组

使用d=[d,c[r_max*I-J+3]]您收集了相同的数组,但是在一个嵌套很深的列表列表中。无法转换为多维数组的

在打印对象时,python不会加入诸如“array”或括号之类的随机词。这些都是由对象本身产生的,并说明了它们的身份和结构。学会阅读这些信息。不要吝啬于基本的python和numpy阅读

一维期望

该2d数组可以通过ravel转换为1d数组:

In [376]: np.array(d).ravel()
Out[376]: 
array([67, 77, 87, 97,  5, 64, 74, 84, 94,  5, 64, 74, 84, 94,  5, 64, 74,
       84, 94,  5, 67, 77, 87, 97,  5, 64, 74, 84, 94,  5, 64, 74, 84, 94,
        5])

另一个选项是在d中收集数组时使用extend

In [377]:   d  =    []
     ...:   x=4
     ...:   for I in range(x-1,-2,-2):
     ...:       for J in range(r_max-s[I]):
     ...:           d.extend(c[r_max*I-J+3])
     ...: 
In [378]: d
Out[378]: 
[67,
 77,
 87,
 ...
 94,
 5]
In [379]: np.array(d)
Out[379]: 
array([67, 77, 87, 97,  5, 64, 74, 84, 94,  5, 64, 74, 84, 94,  5, 64, 74,
       84, 94,  5, 67, 77, 87, 97,  5, 64, 74, 84, 94,  5, 64, 74, 84, 94,
        5])

hstack也可以与原始d一起使用

相关问题 更多 >