array的输出是list,而不是python中的1D数组



我试图写下一个非常简单的行有一个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]]

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可以生成一个很好的2d数字数组。

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

在打印对象时,python不会抛出像'array'或括号这样的随机单词。这些是由物品本身产生的,并告诉我们它们的身份和结构。学会阅读这些信息。不要吝啬基本的python和numpy阅读。

1 d期待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一起使用。

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的定义

相关内容

  • 没有找到相关文章

最新更新