嵌套的 Python numpy 数组维度混淆

ada*_*key 5 python arrays numpy

假设我有一个c构造如下的 numpy 数组:

a = np.zeros((2,4))
b = np.zeros((2,8))
c = np.array([a,b])
Run Code Online (Sandbox Code Playgroud)

我本来希望c.shape(2,1)或者(2,)但它是(2,2)。此外,我想要做的是将一列向量连接到 上a,但通过c以下方式访问它:

c0 = c[0] # I would have expected this to be 'a'
np.concatenate((np.ones((c0.shape[0], 1)), c0), axis=1)
Run Code Online (Sandbox Code Playgroud)

这当然不起作用,因为c[0]不符合a我的预期,我得到

ValueError: all the input arrays must have same number of dimensions
Run Code Online (Sandbox Code Playgroud)

我需要某种方法来拥有一个数组(或列表),每个对组件都是一个 numpy 数组,我需要访问对中的第一个数组,以便将一个列向量连接到它。我的应用程序是机器学习,我的数据将以所描述的格式发送给我,但我需要在开始时修改数据,以便向其中添加偏差元素。

编辑:我使用的是 Python 2.7 和 Numpy 1.8.2

Dux*_*Dux 5

我相信你想要使用的是hstack

a = np.zeros((2,4))  # 4 column vectors of length 2
b = np.ones((2,1))   # 1 column vector of length 2

c = np.hstack((a, b))
print c
# [[ 0.  0.  0.  0.  1.]
#  [ 0.  0.  0.  0.  1.]]
Run Code Online (Sandbox Code Playgroud)

a关于连接你的and 的问题b:这不能以明显的方式完成。串联意味着在附加维度中相互堆叠。不过,您的数据彼此不匹配......


unu*_*tbu 4

一般来说,NumPy 数组的嵌套 NumPy 数组并不是很有用。如果您使用 NumPy 来提高速度,通常最好坚持使用具有同质基本数字数据类型的 NumPy 数组。

将两个项目放入数据结构中,以便c[0]返回第一个项目和c[1]第二个项目,例如列表(或元组)c = [a, b]


顺便说一句,如果您正在使用该 statemodels包,那么您可以添加一个常量列sm.add_constant

import numpy as np
import statsmodels.api as sm

a = np.random.randint(10, size=(2,4))
print(a)
# [[2 3 9 6]
#  [0 2 1 1]]
print(sm.add_constant(a))
[[ 1.  2.  3.  9.  6.]
 [ 1.  0.  2.  1.  1.]]
Run Code Online (Sandbox Code Playgroud)

但请注意,如果a已经包含常量列,则不会添加额外的列:

In [126]: sm.add_constant(np.zeros((2,4)))
Out[126]: 
array([[ 0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.]])
Run Code Online (Sandbox Code Playgroud)

  • “NumPy 数组的嵌套 NumPy 数组不是很有用。” 这个评论不是很有用。一些库使用 NumPy 数组的嵌套 NumPy 数组,并且无法避免它们。 (2认同)