data = [['297348640', 'Y', '12', 'Y'],
['300737722','Y', '1', 'Y'],
['300074407', 'Y', '1', 'N']]
我想将其转换为NumPy数组,所以我做了:
data = np.array(data)
以上工作正常。
现在我有两个清单,比如说
a = [0,2,6]
b = [21,21,9]
我必须在我之前的列表中添加这些内容:
data = [['297348640', 'Y', '12', 'Y', 0, 21],
['300737722','Y', '1', 'Y', 2, 21],
['300074407', 'Y', '1', 'N', 6, 9]]
我尝试了这个,但它给了我错误的尺寸错误
a = np.array([a])
b = np.array([b])
data = np.hstack(data,(a))
data = np.hstack(data,(b))
ValueError: all the input arrays must have same number of dimensions
答案 0 :(得分:4)
与@cᴏʟᴅsᴘᴇᴇᴅ的解决方案类似,但不是传递dtype=object
,而是通过传递data
的dtype更明确:
data = np.array([['297348640', 'Y', '12', 'Y'],
['300737722','Y', '1', 'Y'],
['300074407', 'Y', '1', 'N']])
a = [0,2,6]
b = [21,21,9]
a = np.array(a, dtype=data.dtype)
b = np.array(b, dtype=data.dtype)
data = np.hstack((data, a[:, None], b[:, None]))
np.hstack
的第一个参数是数组序列。现在,您正在传递np.hstack(data,(a))
,它实际上被解析为两个参数。添加一组额外的parantheses会将data
和a
(以及b
)放入一个序列(元组)。
最后,关于索引:In numpy, what does selection by [:,None] do?。这模仿np.reshape()
。
答案 1 :(得分:2)
您当前的data
数组是一个字符串数组,这意味着列堆栈整数列将导致强制转换为字符串。
因此,为防止这种情况,请在列堆叠期间将data
转换为astype。
此外,a
和b
的尺寸必须以某种方式匹配。对于列堆叠,它们需要是与data
高度相同的列向量,以便可以完成堆叠。为此,您可以使用`np.reshape。
最后,对于堆叠,np.hstack
/ np.column_stack
/ np.concatenate
一切正常。
np.concatenate(
(data.astype(object), np.reshape(a, (-1, 1)), np.reshape(b, (-1, 1))),
axis=1
)
或者,
np.column_stack(
(data.astype(object), np.reshape(a, (-1, 1)), np.reshape(b, (-1, 1)))
)
或者,
np.hstack(
(data.astype(object), np.reshape(a, (-1, 1)), np.reshape(b, (-1, 1)))
)
array([['297348640', 'Y', '12', 'Y', 0, 21],
['300737722', 'Y', '1', 'Y', 2, 21],
['300074407', 'Y', '1', 'N', 6, 9]], dtype=object)