如何创建二维数组作为 array.reshape() 方法的重写代码
How to create a 2D array as rewrite code for the array.reshape() method
我正在尝试创建将数组 B 转换为元素数量相等的其他形状数组的函数。
B = np.array([[2, 4, 6], [4, 8, 10]])
到array([[2, 4],[6, 4],[8, 10]])
def my_reshape (A, m, n):
A_ravel = A.ravel()
A_list = [i for i in A_ravel]
print(A_list)
print(len(A_list))
if m*n == len(A_list):
for elem in A_list:
A_shape = [[elem for j in range(n)] for i in range(m)]
else:
print('Q-ty', m*n, ' - doesn't match to q-ty of list)
A_shape = []
return np.array(A_shape)
但它只需要最后一个元素= 10,而不是每个列表?
OUT:
[2, 4, 6, 4, 8, 10]
array([[10, 10],
[10, 10],
[10, 10]])
必须是
array([[2, 4],
[6, 4],
[8, 10]]
2 路
def my_reshape2 (A, m, n):
for elem in A_list:
array= []
for j in range(m):
temp=[]
for i in range(n):
temp.append(i)
array.append(temp)
return array
OUT: [[0, 1], [0, 1], [0, 1]]
我必须如何编写代码才能将 A 中的元素放入新数组?
In [99]: B = np.array([[2, 4, 6], [4, 8, 10]])
In [100]: B
Out[100]:
array([[ 2, 4, 6],
[ 4, 8, 10]])
目标:
In [101]: np.array([[2, 4],[6, 4],[8, 10]])
Out[101]:
array([[ 2, 4],
[ 6, 4],
[ 8, 10]])
简单重塑:
In [102]: B.reshape(3,2)
Out[102]:
array([[ 2, 4],
[ 6, 4],
[ 8, 10]])
reshape
说它本质上是拆散数组,然后用新的形状制作一个新的数组:
In [103]: B.ravel()
Out[103]: array([ 2, 4, 6, 4, 8, 10])
您的目标保持 ravelled
元素的顺序相同。无需重新排列。
用列表做同样的事情是更多的工作。
嵌套列表有一个简单的转置操作:
In [104]: B.tolist()
Out[104]: [[2, 4, 6], [4, 8, 10]]
In [105]: list(zip(*B.tolist()))
Out[105]: [(2, 4), (4, 8), (6, 10)]
In [106]: B.T
Out[106]:
array([[ 2, 4],
[ 4, 8],
[ 6, 10]])
但你不想要那个。
获得 A_list
的最快方法是
In [107]: B.ravel().tolist()
Out[107]: [2, 4, 6, 4, 8, 10]
从中收集 2 个 3 个列表的一种方法是:
In [112]: B_list = B.ravel().tolist()
In [113]: [[i,j] for i,j in zip(B_list[::2], B_list[1::2])]
Out[113]: [[2, 4], [6, 4], [8, 10]]
为了模拟reshape
的效果,您可以将数据复制到另一个正确形状的数组中:
B = np.array([[2, 4, 6], [4, 8, 10]])
output = np.empty((3, 2), dtype=B.dtype)
output.ravel()[:] = B.ravel()[:]
由于 ravel
几乎总是 returns 简单(连续)数组的视图,结果如预期:
>>> output
array([[ 2, 4],
[ 6, 4],
[ 8, 10]])
我正在尝试创建将数组 B 转换为元素数量相等的其他形状数组的函数。
B = np.array([[2, 4, 6], [4, 8, 10]])
到array([[2, 4],[6, 4],[8, 10]])
def my_reshape (A, m, n):
A_ravel = A.ravel()
A_list = [i for i in A_ravel]
print(A_list)
print(len(A_list))
if m*n == len(A_list):
for elem in A_list:
A_shape = [[elem for j in range(n)] for i in range(m)]
else:
print('Q-ty', m*n, ' - doesn't match to q-ty of list)
A_shape = []
return np.array(A_shape)
但它只需要最后一个元素= 10,而不是每个列表?
OUT:
[2, 4, 6, 4, 8, 10]
array([[10, 10],
[10, 10],
[10, 10]])
必须是
array([[2, 4],
[6, 4],
[8, 10]]
2 路
def my_reshape2 (A, m, n):
for elem in A_list:
array= []
for j in range(m):
temp=[]
for i in range(n):
temp.append(i)
array.append(temp)
return array
OUT: [[0, 1], [0, 1], [0, 1]]
我必须如何编写代码才能将 A 中的元素放入新数组?
In [99]: B = np.array([[2, 4, 6], [4, 8, 10]])
In [100]: B
Out[100]:
array([[ 2, 4, 6],
[ 4, 8, 10]])
目标:
In [101]: np.array([[2, 4],[6, 4],[8, 10]])
Out[101]:
array([[ 2, 4],
[ 6, 4],
[ 8, 10]])
简单重塑:
In [102]: B.reshape(3,2)
Out[102]:
array([[ 2, 4],
[ 6, 4],
[ 8, 10]])
reshape
说它本质上是拆散数组,然后用新的形状制作一个新的数组:
In [103]: B.ravel()
Out[103]: array([ 2, 4, 6, 4, 8, 10])
您的目标保持 ravelled
元素的顺序相同。无需重新排列。
用列表做同样的事情是更多的工作。
嵌套列表有一个简单的转置操作:
In [104]: B.tolist()
Out[104]: [[2, 4, 6], [4, 8, 10]]
In [105]: list(zip(*B.tolist()))
Out[105]: [(2, 4), (4, 8), (6, 10)]
In [106]: B.T
Out[106]:
array([[ 2, 4],
[ 4, 8],
[ 6, 10]])
但你不想要那个。
获得 A_list
的最快方法是
In [107]: B.ravel().tolist()
Out[107]: [2, 4, 6, 4, 8, 10]
从中收集 2 个 3 个列表的一种方法是:
In [112]: B_list = B.ravel().tolist()
In [113]: [[i,j] for i,j in zip(B_list[::2], B_list[1::2])]
Out[113]: [[2, 4], [6, 4], [8, 10]]
为了模拟reshape
的效果,您可以将数据复制到另一个正确形状的数组中:
B = np.array([[2, 4, 6], [4, 8, 10]])
output = np.empty((3, 2), dtype=B.dtype)
output.ravel()[:] = B.ravel()[:]
由于 ravel
几乎总是 returns 简单(连续)数组的视图,结果如预期:
>>> output
array([[ 2, 4],
[ 6, 4],
[ 8, 10]])