我试图写下一个非常简单的行有一个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
:
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]]
,这里你添加一个列表作为元素。
如果你想要merge
2列表,你可以这样做: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
的定义