【发布时间】:2020-01-06 20:04:16
【问题描述】:
我想 numpy.concatenate 我从两个不同的列表创建的两个 numpy.arrays。我应该注意到列表中的数据是不同的类型。
我创建了两个列表。我都创建了 numpy 数组。然后我尝试连接。我收到一条错误消息:“所有输入数组必须具有相同的维数”。
l1 = [1, ..., n]
l2 = [1, ..., n]
print(len(l1)) # returns n
print(len(l2)) # returns n
a1 = np.array(l1)
a2 = np.array(l2)
print(np.shape(a1)) # returns (1, n)
print(np.shape(a1.T) # returns (n, 1)
print(np.shape(a2)) # returns (n,)
try:
data = np.concatenate((a1.T, a2), axis=1) # epic fail; computer laughs at me
except Exception as e:
print(e)
我应该注意其中一个列表的数据由地图对象组成。不确定这是否是一个问题。但是变量 l1 本身就是一个列表。
【问题讨论】:
-
我应该注意到原始代码是用 Python 2 编写的,它使用了
l2.append(map(float, data_point))。在查看了 Python 2 和 3 portingguide.readthedocs.io/en/latest/iterators.html 对 map() 行为的更改后,我按照链接中的说明更改了我的代码。在可能相关的更高级别函数中出现另一个错误。 (注意:我测试时数组的排名是一样的) -
检查
dtype和shape。如果两个列表都只包含数字,那么形状应该是(n,)。我不知道你是如何得到(1,n)的——这意味着多了一层[]。map确实需要在 Py2 和 3 之间进行调整。而concatenate需要一致的维数。 -
当我替换地图对象列表时,它似乎已经修复了。之前是:
l2.append(map(float, data))。我将其切换为:l2.append([float(x) for x in data])。它修复了我遇到的上述错误和“数组中的索引过多”的错误。我还应该补充一点,python 脚本不是由我创建的,而是包含根据以前的输出结果看起来准确的输出图。根据我附加的链接,它说 map() 从 2.x 更改为 3.x。不知道为什么,但改变对我有用。
标签: python-3.x list numpy dimensions numpy-ndarray