问题:在numpy中将一维数组转换为二维数组
我想通过指定2D数组中的列数将一维数组转换为二维数组。可能会像这样工作:
> import numpy as np
> A = np.array([1,2,3,4,5,6])
> B = vec2matrix(A,ncol=2)
> B
array([[1, 2],
[3, 4],
[5, 6]])
numpy是否具有类似于我的组合函数“ vec2matrix”的功能?(我知道您可以像2D数组一样索引1D数组,但这不是我拥有的代码中的选项-我需要进行此转换。)
回答 0
回答 1
您有两种选择:
如果您不再想要原始形状,最简单的方法就是为数组分配一个新形状
a.shape = (a.size//ncols, ncols)
您可以切换
a.size//ncols
通过-1
自动计算合适的形状。确保a.shape[0]*a.shape[1]=a.size
,否则会遇到一些问题。您可以使用
np.reshape
函数获得一个新的数组,该函数的工作原理与上述版本相似new = np.reshape(a, (-1, ncols))
如果可能,
new
将仅是初始array的视图a
,这意味着数据是共享的。但是,在某些情况下,new
数组将被复制。请注意,np.reshape
还接受一个可选关键字order
,该关键字使您可以从行优先C顺序切换到列优先Fortran顺序。np.reshape
是该a.reshape
方法的函数版本。
如果您不能满足要求a.shape[0]*a.shape[1]=a.size
,则必须创建一个新数组。您可以使用该np.resize
函数并将其与混合使用np.reshape
,例如
>>> a =np.arange(9)
>>> np.resize(a, 10).reshape(5,2)
回答 2
尝试类似的方法:
B = np.reshape(A,(-1,ncols))
您需要确保可以将数组中的元素数除以ncols
。您也可以B
使用order
关键字按照将数字拉入的顺序进行游戏。
回答 3
如果您的唯一目的是将1d数组X转换为2d数组,请执行以下操作:
X = np.reshape(X,(1, X.size))
回答 4
import numpy as np
array = np.arange(8)
print("Original array : \n", array)
array = np.arange(8).reshape(2, 4)
print("New array : \n", array)
回答 5
some_array.shape = (1,)+some_array.shape
或换一个新的
another_array = numpy.reshape(some_array, (1,)+some_array.shape)
这将使尺寸+1,等于在最外层添加一个括号
回答 6
您可以flatten()
从numpy包中使用。
import numpy as np
a = np.array([[1, 2],
[3, 4],
[5, 6]])
a_flat = a.flatten()
print(f"original array: {a} \nflattened array = {a_flat}")
输出:
original array: [[1 2]
[3 4]
[5 6]]
flattened array = [1 2 3 4 5 6]
回答 7
不使用Numpy将一维数组更改为二维数组。
l = [i for i in range(1,21)]
part = 3
new = []
start, end = 0, part
while end <= len(l):
temp = []
for i in range(start, end):
temp.append(l[i])
new.append(temp)
start += part
end += part
print("new values: ", new)
# for uneven cases
temp = []
while start < len(l):
temp.append(l[start])
start += 1
new.append(temp)
print("new values for uneven cases: ", new)
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。