我很难选择NumPy矩阵每行的特定列.
假设我有以下矩阵,我会称之为X:
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
Run Code Online (Sandbox Code Playgroud)
我还会list调用每行的列索引Y:
[1, 0, 2]
Run Code Online (Sandbox Code Playgroud)
我需要获取值:
[2]
[4]
[9]
Run Code Online (Sandbox Code Playgroud)
取而代之的是list使用索引Y,我还可以产生一个矩阵具有相同的形状X,每一个列是bool/ int范围在0-1之间的值,表明这是否是必需的列.
[0, 1, 0]
[1, 0, 0]
[0, 0, 1]
Run Code Online (Sandbox Code Playgroud)
我知道这可以通过迭代数组并选择我需要的列值来完成.但是,这将在大数据阵列上频繁执行,这就是它必须尽可能快地运行的原因.
我想知道是否有更好的解决方案?
谢谢.
我有一个2D numpy数组,我有一个行和列的数组,应该设置为一个特定的值.让我们考虑以下示例
a = array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
Run Code Online (Sandbox Code Playgroud)
我想修改行[0,2]和列[1,2]的条目.这应该导致以下数组
a = array([[1, 2, 0],
[4, 5, 0],
[7, 8, 9]])
Run Code Online (Sandbox Code Playgroud)
我做了以下操作,结果修改了每一行中的每个列序列
rows = [0,1]
cols = [2,2]
b=a[numpy.ix_(rows,columns)]
Run Code Online (Sandbox Code Playgroud)
它导致以下数组修改指定数组的每一列
array([[1, 0, 0],
[4, 5, 6],
[7, 0, 0]])
Run Code Online (Sandbox Code Playgroud)
有人可以让我知道怎么做吗?
非常感谢
编辑:需要注意的是,行和列恰好发生在顺序上.实际的一点是,这些可以是任意的,也可以是任何顺序.如果是rows = [a,b,c]和cols = [nxz],那么我想在位置(a,n),(b,x),(c,z)处准确修改三个元素.
我希望选择 a 列和 b 列中每行的前两个元素。
这是一个例子
df = pd.DataFrame({'a': ['A123', 'A567','A100'], 'b': ['A156', 'A266666','A35555']})
>>> df
a b
0 A123 A156
1 A567 A266666
2 A100 A35555
Run Code Online (Sandbox Code Playgroud)
期望的输出
>>> df
a b
0 A1 A1
1 A5 A2
2 A1 A3
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用df.loc但没有成功。
这是我在 Python 2.7 中尝试使用 Numpy 做的事情。a假设我有一个由以下内容定义的数组:
a = np.array([[1,3,3],[4,5,6],[7,8,1]])
Run Code Online (Sandbox Code Playgroud)
我可以做a.argmax(0)或a.argmax(1)获得行/列明智的argmax:
a.argmax(0)
Out[329]: array([2, 2, 1], dtype=int64)
a.argmax(1)
Out[330]: array([1, 2, 1], dtype=int64)
Run Code Online (Sandbox Code Playgroud)
但是,当存在像a第一行那样的平局时,我希望在平局之间随机决定 argmax (默认情况下,只要 argmax 或 argmin 中出现平局,Numpy 就会返回第一个元素)。
去年,有人提出了随机解决 Numpy argmax/argmin 关系的问题:Select One Element in Each Row of a Numpy Array by Column Indices
然而,这个问题针对的是一维数组。在那里,得票最多的答案对此很有效。还有第二个答案,尝试解决多维数组的问题,但不起作用 - 即它不会返回每行/列的最大值的索引,并随机解决关系。
由于我正在使用大数组,因此最有效的方法是什么?