我有一个数据集,格式如下:
A=[(Num1,Num2,Num3), (Num4,Num5,Num6), (Num7,Num8,Num9)]
A.shape = (3,)
我希望将其转换为一个2D的numpy数组:
A=[[Num1,Num2,Num3],[Num4,Num5,Num6],[Num7,Num8,Num9]]
随着
A.shape = (3,3)
我怎样做到这一点,最好不用循环?谢谢。
我不确定我是否正确理解了问题,但这对你有用吗?
import numpy as np
A = [[1,2,3],[4,5,6],[7,8,9]]
A = np.array(A)
如果 A
是一个 NumPy 数组列表,那么怎么样:Ah = np.vstack(A)
Av = np.hstack(A)
import numpy as np
a = np.array([np.array([1,2,3]),np.array([2,3,4]),np.array([6,7,8])])
print a
输出:
>>>[[1 2 3]
[2 3 4]
[6 7 8]]
不进行自动转换(寻找第二个子数组的变化):
import numpy as np
b = np.array([np.array([1,2,3]),np.array([2,3,4,5]),np.array([6,7,8])])
print b
输出:
>>>[array([1, 2, 3]) array([2, 3, 4, 5]) array([6, 7, 8])]
我发现了几种将数组转换成2D数组的方法。无论哪种方法,你都需要摆脱那些不同大小的子数组。因此,你需要使用掩码来选择只有“好”的子数组。然后,你可以使用列表推导式来重新创建数组,像这样:
import numpy as np
a = np.array([np.array([1,2,3]),np.array([2,3,4,5]),np.array([6,7,8])])
mask = np.array([True, False, True])
c = np.array([element for (i,element) in enumerate(a) if mask[i]])
print a
print c
输出:
>>>>[array([1, 2, 3]) array([2, 3, 4, 5]) array([6, 7, 8])]
>>>>[[1 2 3]
[6 7 8]]
import numpy as np
a = np.array([np.array([1,2,3]),np.array([2,3,4,5]),np.array([6,7,8])])
mask = np.array([True, False, True])
d = np.delete(a,np.where(mask==False))
e = np.vstack(d)
print a
print e
输出:
>>>>[array([1, 2, 3]) array([2, 3, 4, 5]) array([6, 7, 8])]
>>>>[[1 2 3]
[6 7 8]]
我认为对于大型数组来说第二种方法会更快,但我还没有测试时间。
我认为:
A = map(lambda t: list(t), A)
map(list, A)
- tobias_kIn [314]: data
Out[314]: array([(1, 2, 3), (4, 5, 6), (7, 8, 9)], dtype=object)
In [315]: data.shape
Out[315]: (3L,)
data2 = np.empty((3,3), dtype=int)
#Neither of these work.
data2[:] = data[:]
data2[:] = data[:, None]
#This will work, but requires looping
data2[0,:] = data[0]
data2[1,:] = data[1]
data2[2,:] = data[2]
#This is the easies way i could find
data2 = np.array(data.tolist())
A
是什么?是Python列表还是NumPy数组?看起来你只需要使用numpy.array(A)
。问题具体在哪里? - tobias_knumpy.array(A)
的评论和答案都是正确的,但有一个警告:内部元素(无论它们是元组、列表还是 np.arrays 本身)必须具有相同的长度。如果它们长度不同,你仍然会得到A.shape = (3,)
,而且A
的数据类型将为object
。我曾经因为元素意外地具有不同的长度而被卡住过。 - mattsilver