我有两个numpy数组,定义网格的x和y轴.例如:
x = numpy.array([1,2,3])
y = numpy.array([4,5])
Run Code Online (Sandbox Code Playgroud)
我想生成这些数组的笛卡尔积来生成:
array([[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]])
Run Code Online (Sandbox Code Playgroud)
在某种程度上,由于我需要在循环中多次执行此操作,因此效率不高.我假设将它们转换为Python列表并使用itertools.product并返回到numpy数组并不是最有效的形式.
使用沿给定维度的(n-1)维数组访问n维数组的最优雅方法是什么,如虚拟示例中所示
a = np.random.random_sample((3,4,4))
b = np.random.random_sample((3,4,4))
idx = np.argmax(a, axis=0)
Run Code Online (Sandbox Code Playgroud)
我现在如何访问idx a以获得最大值,a就像我使用过一样a.max(axis=0)?或者如何检索idxin中指定的值b?
我想过使用,np.meshgrid但我认为这是一种矫枉过正.请注意,尺寸axis可以是任何有用的轴(0,1,2),并且事先不知道.有一种优雅的方式来做到这一点?
我有一个多维numpy数组,试图将其粘贴到熊猫数据框中。我想展平数组,并创建一个反映预展平数组索引的熊猫索引。
请注意,我使用3D来缩小示例,但我想将其推广到至少4D
A = np.random.rand(2,3,4)
array([[[ 0.43793885, 0.40078139, 0.48078691, 0.05334248],
[ 0.76331509, 0.82514441, 0.86169078, 0.86496111],
[ 0.75572665, 0.80860943, 0.79995337, 0.63123724]],
[[ 0.20648946, 0.57042315, 0.71777265, 0.34155005],
[ 0.30843717, 0.39381407, 0.12623462, 0.93481552],
[ 0.3267771 , 0.64097038, 0.30405215, 0.57726629]]])
df = pd.DataFrame(A.flatten())
Run Code Online (Sandbox Code Playgroud)
我正在尝试生成像这样的x / y / z列:
A z y x
0 0.437939 0 0 0
1 0.400781 0 0 1
2 0.480787 0 0 2
3 0.053342 0 0 3
4 0.763315 0 1 0
5 0.825144 0 1 1
6 0.861691 …Run Code Online (Sandbox Code Playgroud) 给定一个数组:
arr = np.array([[1, 3, 7], [4, 9, 8]]); arr
array([[1, 3, 7],
[4, 9, 8]])
Run Code Online (Sandbox Code Playgroud)
并给出其索引:
np.indices(arr.shape)
array([[[0, 0, 0],
[1, 1, 1]],
[[0, 1, 2],
[0, 1, 2]]])
Run Code Online (Sandbox Code Playgroud)
如何将它们整齐地堆叠在一起以形成新的2D阵列?这就是我想要的:
array([[0, 0, 1],
[0, 1, 3],
[0, 2, 7],
[1, 0, 4],
[1, 1, 9],
[1, 2, 8]])
Run Code Online (Sandbox Code Playgroud)
这是我目前的解决方案:
def foo(arr):
return np.hstack((np.indices(arr.shape).reshape(2, arr.size).T, arr.reshape(-1, 1)))
Run Code Online (Sandbox Code Playgroud)
它可以工作,但是执行此操作是否更短/更优雅?
我试图在给出单应矩阵的情况下执行逆变形,为了有效地做到这一点,我需要一个看起来像这样的numpy数组:
([[0, 0, 1], [0, 1, 1], [0, 2, 1], ... [1, 0, 1], [1, 1, 1], ... [n, p, 1]])
Run Code Online (Sandbox Code Playgroud)
其中n是图像的宽度(im.shape[0]),p是图像的高度(im.shape[1]).关于如何有效地构建看起来那样的numpy数组的任何想法?
编辑:
有一些讨论哪个是最快的,如果有人有任何信息,我认为听起来很有趣.我感谢大家的帮助!
我想用numpy创建这种数组:
[[[0,0,0], [1,0,0], ..., [1919,0,0]],
[[0,1,0], [1,1,0], ..., [1919,1,0]],
...,
[[0,1019,0], [1,1019,0], ..., [1919,1019,0]]]
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方式访问:
>>> data[25][37]
array([25, 37, 0])
Run Code Online (Sandbox Code Playgroud)
我试过用这种方式创建一个数组,但它并不完整:
>>> data = np.mgrid[0:1920:1, 0:1080:1].swapaxes(0,2).swapaxes(0,1)
>>> data[25][37]
array([25, 37])
Run Code Online (Sandbox Code Playgroud)
你知道怎么用numpy解决这个问题吗?