[英]How to treat 1D arrays as (1 by n) 2D arrays in numpy?
如果之前有人问过这个问题,我深表歉意,但我似乎找不到答案,或者我没有正确寻找答案。
我目前正在使用 numpy 在 python 中编写代码,而我的 function 将输入作为矩阵。 我想将一维数组视为(1×n)二维数组。
这是我的问题的一个最小示例。 下面的 function 取输入两个矩阵,将第一个矩阵的左上角元素加到第二个矩阵的右下角元素上。
import numpy as np
def add_corners(A, B):
r = A[0, 0] + B[B.shape[0] - 1, B.shape[1] - 1]
return r
C = np.array([[1, 2, 3], [4, 5, 6]])
D = np.array([[9, 8], [7, 6], [5, 4], [10, 11]])
E = np.array([1, 2, 3, 4, 5])
print(add_corners(C, D))
print(add_corners(C, E))
print(add_corners(C,E))
导致错误,因为E.shape[1]
定义不明确。 有没有办法解决这个问题而不必添加 if 语句来检查我的输入是否包含一维数组? 也就是说,我想将 E 的条目称为E[1,x]
而不是E[x]
。
任何帮助是极大的赞赏!
您需要添加一个额外的维度。 你可以这样做:
add_corners(C, E[:, None])
或使用np.expand_dims
:
add_corners(C, np.expand_dims(E, -1))
这是它的样子:
>>> E
array([1, 2, 3, 4, 5])
>>> E[:, None]
array([[1],
[2],
[3],
[4],
[5]])
>>> E[:, None].shape
(5, 1)
为了更容易和方便的方式,您可以使用平面迭代器:
def add_corners(A, B):
return A.flat[0] + B.flat[-1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.