如何正确使用数组 numpy.c_
How to use numpy.c_ properly for arrays
我有一个正在尝试矢量化的函数。在函数内部我有以下代码。
A = np.c_[xdata, ydata, np.ones(len(zdata))]
其中x_data、y_data、z_data都是1x5的数组,eg. [1,2,3,4,5]。 A 的结果输出为
array([[1.90155189, 1.64412979, 1. ],
[2.44148892, 1.73851717, 1. ],
[1.65259189, 2.10693759, 1. ],
[2.52045732, 2.30939049, 1. ],
[1.53516213, 2.39788003, 1. ]])
我想将这部分函数转换为处理 x、y、z 的输入数组(例如 1000 行 5 列)。我天真地试图将数组输入到这个函数中,第一行的输出如下。
array([1.90155189, 2.44148892, 1.65259189, 2.52045732, 1.53516213,
1.64412979, 1.73851717, 2.10693759, 2.30939049, 2.39788003,
1. ])
这是第一个结果的输入示例:
x=[1.90155189 2.44148892 1.65259189 2.52045732 1.53516213]
y=[1.64412979 1.73851717 2.10693759 2.30939049 2.39788003]
z=[0.23273446 0.57301046 0.89755946 0.07169598 0.41394575]
假设现在我有第二种方法的以下数据:
x_array = [[1.90155189 2.44148892 1.65259189 2.52045732 1.53516213],
[1.90155189 2.44148892 1.65259189 2.52045732 1.53516213],
[1.90155189 2.44148892 1.65259189 2.52045732 1.53516213]]
y_array = [[1.64412979 1.73851717 2.10693759 2.30939049 2.39788003],
[1.64412979 1.73851717 2.10693759 2.30939049 2.39788003],
[1.64412979 1.73851717 2.10693759 2.30939049 2.39788003]]
z_array = [[0.23273446 0.57301046 0.89755946 0.07169598 0.41394575],
[0.23273446 0.57301046 0.89755946 0.07169598 0.41394575],
[0.23273446 0.57301046 0.89755946 0.07169598 0.41394575]]
预期输出为
[[[1.90155189, 1.64412979, 1. ],
[2.44148892, 1.73851717, 1. ],
[1.65259189, 2.10693759, 1. ],
[2.52045732, 2.30939049, 1. ],
[1.53516213, 2.39788003, 1. ]],
[[1.90155189, 1.64412979, 1. ],
[2.44148892, 1.73851717, 1. ],
[1.65259189, 2.10693759, 1. ],
[2.52045732, 2.30939049, 1. ],
[1.53516213, 2.39788003, 1. ]],
[[1.90155189, 1.64412979, 1. ],
[2.44148892, 1.73851717, 1. ],
[1.65259189, 2.10693759, 1. ],
[2.52045732, 2.30939049, 1. ],
[1.53516213, 2.39788003, 1. ]]]
你可以使用这个:
编辑:在行下方评论,添加了下一行,感谢@hpaulj 的评论。
# new_A = np.stack((x,y,np.ones_like(z)), axis=1).swapaxes(1,2)
new_A = np.stack((x,y,np.ones_like(z)), axis=2)
正在测试:
THOUSAND = 6
x = np.random.randint(1,5,size=(THOUSAND,5))
y = np.random.randint(1,5,size=(THOUSAND,5))
z = np.random.randint(1,5,size=(THOUSAND,5))
print (x)
print (y)
print (z)
new_A = np.stack((x,y,np.ones_like(z)), axis=1).swapaxes(1,2)
print (new_A)
输出:
[[1 2 2 1 1] # print(x)
[4 4 4 4 4]
[1 2 1 3 3]
[2 3 1 4 4]
[1 1 4 1 4]
[4 1 3 3 2]]
[[2 2 3 4 4] # print(y)
[1 1 4 2 1]
[3 3 1 1 2]
[1 1 2 1 3]
[3 2 1 4 3]
[4 4 1 3 2]]
[[3 4 3 2 2] # print(z)
[4 2 4 3 3]
[3 3 4 1 4]
[4 3 3 3 1]
[4 1 1 3 3]
[4 1 4 3 3]]
# new_A output
[[[1 2 1] # print(new_A)
[2 2 1]
[2 3 1]
[1 4 1]
[1 4 1]]
[[4 1 1]
[4 1 1]
[4 4 1]
[4 2 1]
[4 1 1]]
[[1 3 1]
[2 3 1]
[1 1 1]
[3 1 1]
[3 2 1]]
[[2 1 1]
[3 1 1]
[1 2 1]
[4 1 1]
[4 3 1]]
[[1 3 1]
[1 2 1]
[4 1 1]
[1 4 1]
[4 3 1]]
[[4 4 1]
[1 4 1]
[3 1 1]
[3 3 1]
[2 2 1]]]
我有一个正在尝试矢量化的函数。在函数内部我有以下代码。
A = np.c_[xdata, ydata, np.ones(len(zdata))]
其中x_data、y_data、z_data都是1x5的数组,eg. [1,2,3,4,5]。 A 的结果输出为
array([[1.90155189, 1.64412979, 1. ],
[2.44148892, 1.73851717, 1. ],
[1.65259189, 2.10693759, 1. ],
[2.52045732, 2.30939049, 1. ],
[1.53516213, 2.39788003, 1. ]])
我想将这部分函数转换为处理 x、y、z 的输入数组(例如 1000 行 5 列)。我天真地试图将数组输入到这个函数中,第一行的输出如下。
array([1.90155189, 2.44148892, 1.65259189, 2.52045732, 1.53516213,
1.64412979, 1.73851717, 2.10693759, 2.30939049, 2.39788003,
1. ])
这是第一个结果的输入示例:
x=[1.90155189 2.44148892 1.65259189 2.52045732 1.53516213]
y=[1.64412979 1.73851717 2.10693759 2.30939049 2.39788003]
z=[0.23273446 0.57301046 0.89755946 0.07169598 0.41394575]
假设现在我有第二种方法的以下数据:
x_array = [[1.90155189 2.44148892 1.65259189 2.52045732 1.53516213],
[1.90155189 2.44148892 1.65259189 2.52045732 1.53516213],
[1.90155189 2.44148892 1.65259189 2.52045732 1.53516213]]
y_array = [[1.64412979 1.73851717 2.10693759 2.30939049 2.39788003],
[1.64412979 1.73851717 2.10693759 2.30939049 2.39788003],
[1.64412979 1.73851717 2.10693759 2.30939049 2.39788003]]
z_array = [[0.23273446 0.57301046 0.89755946 0.07169598 0.41394575],
[0.23273446 0.57301046 0.89755946 0.07169598 0.41394575],
[0.23273446 0.57301046 0.89755946 0.07169598 0.41394575]]
预期输出为
[[[1.90155189, 1.64412979, 1. ],
[2.44148892, 1.73851717, 1. ],
[1.65259189, 2.10693759, 1. ],
[2.52045732, 2.30939049, 1. ],
[1.53516213, 2.39788003, 1. ]],
[[1.90155189, 1.64412979, 1. ],
[2.44148892, 1.73851717, 1. ],
[1.65259189, 2.10693759, 1. ],
[2.52045732, 2.30939049, 1. ],
[1.53516213, 2.39788003, 1. ]],
[[1.90155189, 1.64412979, 1. ],
[2.44148892, 1.73851717, 1. ],
[1.65259189, 2.10693759, 1. ],
[2.52045732, 2.30939049, 1. ],
[1.53516213, 2.39788003, 1. ]]]
你可以使用这个:
编辑:在行下方评论,添加了下一行,感谢@hpaulj 的评论。
# new_A = np.stack((x,y,np.ones_like(z)), axis=1).swapaxes(1,2)
new_A = np.stack((x,y,np.ones_like(z)), axis=2)
正在测试:
THOUSAND = 6
x = np.random.randint(1,5,size=(THOUSAND,5))
y = np.random.randint(1,5,size=(THOUSAND,5))
z = np.random.randint(1,5,size=(THOUSAND,5))
print (x)
print (y)
print (z)
new_A = np.stack((x,y,np.ones_like(z)), axis=1).swapaxes(1,2)
print (new_A)
输出:
[[1 2 2 1 1] # print(x)
[4 4 4 4 4]
[1 2 1 3 3]
[2 3 1 4 4]
[1 1 4 1 4]
[4 1 3 3 2]]
[[2 2 3 4 4] # print(y)
[1 1 4 2 1]
[3 3 1 1 2]
[1 1 2 1 3]
[3 2 1 4 3]
[4 4 1 3 2]]
[[3 4 3 2 2] # print(z)
[4 2 4 3 3]
[3 3 4 1 4]
[4 3 3 3 1]
[4 1 1 3 3]
[4 1 4 3 3]]
# new_A output
[[[1 2 1] # print(new_A)
[2 2 1]
[2 3 1]
[1 4 1]
[1 4 1]]
[[4 1 1]
[4 1 1]
[4 4 1]
[4 2 1]
[4 1 1]]
[[1 3 1]
[2 3 1]
[1 1 1]
[3 1 1]
[3 2 1]]
[[2 1 1]
[3 1 1]
[1 2 1]
[4 1 1]
[4 3 1]]
[[1 3 1]
[1 2 1]
[4 1 1]
[1 4 1]
[4 3 1]]
[[4 4 1]
[1 4 1]
[3 1 1]
[3 3 1]
[2 2 1]]]